From 5e197352db03218c4c0a4581be83a984f7d9c6c7 Mon Sep 17 00:00:00 2001 From: Daniel Rieske Date: Sat, 10 Aug 2024 00:17:34 +0200 Subject: [PATCH 01/32] feat: migrated r/config to sdkv2 --- internal/service/route53resolver/config.go | 128 ++++++++---------- .../service/route53resolver/config_test.go | 14 +- 2 files changed, 64 insertions(+), 78 deletions(-) diff --git a/internal/service/route53resolver/config.go b/internal/service/route53resolver/config.go index f5289628d14a..4ad545347a41 100644 --- a/internal/service/route53resolver/config.go +++ b/internal/service/route53resolver/config.go @@ -8,20 +8,22 @@ import ( "log" "time" - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/service/route53resolver" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/route53resolver" + awstypes "github.com/aws/aws-sdk-go-v2/service/route53resolver/types" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/hashicorp/terraform-provider-aws/internal/conns" + "github.com/hashicorp/terraform-provider-aws/internal/enum" + "github.com/hashicorp/terraform-provider-aws/internal/errs" "github.com/hashicorp/terraform-provider-aws/internal/errs/sdkdiag" "github.com/hashicorp/terraform-provider-aws/internal/tfresource" "github.com/hashicorp/terraform-provider-aws/names" ) -// @SDKResource("aws_route53_resolver_config") -func ResourceConfig() *schema.Resource { +// @SDKResource("aws_route53_resolver_config", name="Config") +func resourceConfig() *schema.Resource { return &schema.Resource{ CreateWithoutTimeout: resourceConfigCreate, ReadWithoutTimeout: resourceConfigRead, @@ -34,9 +36,9 @@ func ResourceConfig() *schema.Resource { Schema: map[string]*schema.Schema{ "autodefined_reverse_flag": { - Type: schema.TypeString, - Required: true, - ValidateFunc: validation.StringInSlice(autodefinedReverseFlag_Values(), false), + Type: schema.TypeString, + Required: true, + ValidateDiagFunc: enum.Validate[awstypes.AutodefinedReverseFlag](), }, names.AttrOwnerID: { Type: schema.TypeString, @@ -53,21 +55,21 @@ func ResourceConfig() *schema.Resource { func resourceConfigCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).Route53ResolverConn(ctx) + conn := meta.(*conns.AWSClient).Route53ResolverClient(ctx) - autodefinedReverseFlag := d.Get("autodefined_reverse_flag").(string) + autodefinedReverseFlag := awstypes.AutodefinedReverseFlag(d.Get("autodefined_reverse_flag").(string)) input := &route53resolver.UpdateResolverConfigInput{ - AutodefinedReverseFlag: aws.String(autodefinedReverseFlag), + AutodefinedReverseFlag: autodefinedReverseFlag, ResourceId: aws.String(d.Get(names.AttrResourceID).(string)), } - output, err := conn.UpdateResolverConfigWithContext(ctx, input) + output, err := conn.UpdateResolverConfig(ctx, input) if err != nil { return sdkdiag.AppendErrorf(diags, "creating Route53 Resolver Config: %s", err) } - d.SetId(aws.StringValue(output.ResolverConfig.Id)) + d.SetId(aws.ToString(output.ResolverConfig.Id)) if _, err = waitAutodefinedReverseUpdated(ctx, conn, d.Id(), autodefinedReverseFlag); err != nil { return sdkdiag.AppendErrorf(diags, "waiting for Route53 Resolver Config (%s) create: %s", d.Id(), err) @@ -78,9 +80,9 @@ func resourceConfigCreate(ctx context.Context, d *schema.ResourceData, meta inte func resourceConfigRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).Route53ResolverConn(ctx) + conn := meta.(*conns.AWSClient).Route53ResolverClient(ctx) - resolverConfig, err := FindResolverConfigByID(ctx, conn, d.Id()) + resolverConfig, err := findResolverConfigByID(ctx, conn, d.Id()) if !d.IsNewResource() && tfresource.NotFound(err) { log.Printf("[WARN] Route53 Resolver Config (%s) not found, removing from state", d.Id()) @@ -92,13 +94,7 @@ func resourceConfigRead(ctx context.Context, d *schema.ResourceData, meta interf return sdkdiag.AppendErrorf(diags, "reading Route53 Resolver Config (%s): %s", d.Id(), err) } - var autodefinedReverseFlag string - if aws.StringValue(resolverConfig.AutodefinedReverse) == route53resolver.ResolverAutodefinedReverseStatusEnabled { - autodefinedReverseFlag = autodefinedReverseFlagEnable - } else { - autodefinedReverseFlag = autodefinedReverseFlagDisable - } - d.Set("autodefined_reverse_flag", autodefinedReverseFlag) + d.Set("autodefined_reverse_flag", resolverConfig.AutodefinedReverse) d.Set(names.AttrOwnerID, resolverConfig.OwnerId) d.Set(names.AttrResourceID, resolverConfig.ResourceId) @@ -107,15 +103,15 @@ func resourceConfigRead(ctx context.Context, d *schema.ResourceData, meta interf func resourceConfigUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).Route53ResolverConn(ctx) + conn := meta.(*conns.AWSClient).Route53ResolverClient(ctx) - autodefinedReverseFlag := d.Get("autodefined_reverse_flag").(string) + autodefinedReverseFlag := awstypes.AutodefinedReverseFlag(d.Get("autodefined_reverse_flag").(string)) input := &route53resolver.UpdateResolverConfigInput{ - AutodefinedReverseFlag: aws.String(autodefinedReverseFlag), + AutodefinedReverseFlag: autodefinedReverseFlag, ResourceId: aws.String(d.Get(names.AttrResourceID).(string)), } - _, err := conn.UpdateResolverConfigWithContext(ctx, input) + _, err := conn.UpdateResolverConfig(ctx, input) if err != nil { return sdkdiag.AppendErrorf(diags, "updating Route53 Resolver Config: %s", err) @@ -128,54 +124,44 @@ func resourceConfigUpdate(ctx context.Context, d *schema.ResourceData, meta inte return append(diags, resourceConfigRead(ctx, d, meta)...) } -func FindResolverConfigByID(ctx context.Context, conn *route53resolver.Route53Resolver, id string) (*route53resolver.ResolverConfig, error) { +func findResolverConfigByID(ctx context.Context, conn *route53resolver.Client, id string) (*awstypes.ResolverConfig, error) { input := &route53resolver.ListResolverConfigsInput{} - var output *route53resolver.ResolverConfig + var output *awstypes.ResolverConfig // GetResolverConfig does not support query by ID. - err := conn.ListResolverConfigsPagesWithContext(ctx, input, func(page *route53resolver.ListResolverConfigsOutput, lastPage bool) bool { - if page == nil { - return !lastPage - } - - for _, v := range page.ResolverConfigs { - if aws.StringValue(v.Id) == id { - output = v - - return false + pages := route53resolver.NewListResolverConfigsPaginator(conn, input) + for pages.HasMorePages() { + page, err := pages.NextPage(ctx) + + if errs.IsA[*awstypes.ResourceNotFoundException](err) { + return nil, &retry.NotFoundError{ + LastError: err, + LastRequest: input, } } - return !lastPage - }) + if err != nil { + return nil, err + } - if err != nil { - return nil, err - } + if output == nil { + return nil, tfresource.NewEmptyResultError(input) + } - if output == nil { - return nil, &retry.NotFoundError{LastRequest: input} + for _, v := range page.ResolverConfigs { + if aws.ToString(v.Id) == id { + output = &v + break + } + } } return output, nil } -const ( - // https://docs.aws.amazon.com/Route53/latest/APIReference/API_route53resolver_UpdateResolverConfig.html#API_route53resolver_UpdateResolverConfig_RequestSyntax - autodefinedReverseFlagDisable = "DISABLE" - autodefinedReverseFlagEnable = "ENABLE" -) - -func autodefinedReverseFlag_Values() []string { - return []string{ - autodefinedReverseFlagDisable, - autodefinedReverseFlagEnable, - } -} - -func statusAutodefinedReverse(ctx context.Context, conn *route53resolver.Route53Resolver, id string) retry.StateRefreshFunc { +func statusAutodefinedReverse(ctx context.Context, conn *route53resolver.Client, id string) retry.StateRefreshFunc { return func() (interface{}, string, error) { - output, err := FindResolverConfigByID(ctx, conn, id) + output, err := findResolverConfigByID(ctx, conn, id) if tfresource.NotFound(err) { return nil, "", nil @@ -185,7 +171,7 @@ func statusAutodefinedReverse(ctx context.Context, conn *route53resolver.Route53 return nil, "", err } - return output, aws.StringValue(output.AutodefinedReverse), nil + return output, string(output.AutodefinedReverse), nil } } @@ -193,42 +179,42 @@ const ( autodefinedReverseUpdatedTimeout = 10 * time.Minute ) -func waitAutodefinedReverseUpdated(ctx context.Context, conn *route53resolver.Route53Resolver, id, autodefinedReverseFlag string) (*route53resolver.ResolverConfig, error) { - if autodefinedReverseFlag == autodefinedReverseFlagDisable { +func waitAutodefinedReverseUpdated(ctx context.Context, conn *route53resolver.Client, id string, autodefinedReverseFlag awstypes.AutodefinedReverseFlag) (*awstypes.ResolverConfig, error) { + if autodefinedReverseFlag == awstypes.AutodefinedReverseFlagDisable { return waitAutodefinedReverseDisabled(ctx, conn, id) } else { return waitAutodefinedReverseEnabled(ctx, conn, id) } } -func waitAutodefinedReverseEnabled(ctx context.Context, conn *route53resolver.Route53Resolver, id string) (*route53resolver.ResolverConfig, error) { +func waitAutodefinedReverseEnabled(ctx context.Context, conn *route53resolver.Client, id string) (*awstypes.ResolverConfig, error) { stateConf := &retry.StateChangeConf{ - Pending: []string{route53resolver.ResolverAutodefinedReverseStatusEnabling}, - Target: []string{route53resolver.ResolverAutodefinedReverseStatusEnabled}, + Pending: enum.Slice(awstypes.ResolverAutodefinedReverseStatusEnabling), + Target: enum.Slice(awstypes.ResolverAutodefinedReverseStatusEnabled), Refresh: statusAutodefinedReverse(ctx, conn, id), Timeout: autodefinedReverseUpdatedTimeout, } outputRaw, err := stateConf.WaitForStateContext(ctx) - if output, ok := outputRaw.(*route53resolver.ResolverConfig); ok { + if output, ok := outputRaw.(*awstypes.ResolverConfig); ok { return output, err } return nil, err } -func waitAutodefinedReverseDisabled(ctx context.Context, conn *route53resolver.Route53Resolver, id string) (*route53resolver.ResolverConfig, error) { +func waitAutodefinedReverseDisabled(ctx context.Context, conn *route53resolver.Client, id string) (*awstypes.ResolverConfig, error) { stateConf := &retry.StateChangeConf{ - Pending: []string{route53resolver.ResolverAutodefinedReverseStatusDisabling}, - Target: []string{route53resolver.ResolverAutodefinedReverseStatusDisabled}, + Pending: enum.Slice(awstypes.ResolverAutodefinedReverseStatusDisabling), + Target: enum.Slice(awstypes.ResolverAutodefinedReverseStatusDisabled), Refresh: statusAutodefinedReverse(ctx, conn, id), Timeout: autodefinedReverseUpdatedTimeout, } outputRaw, err := stateConf.WaitForStateContext(ctx) - if output, ok := outputRaw.(*route53resolver.ResolverConfig); ok { + if output, ok := outputRaw.(*awstypes.ResolverConfig); ok { return output, err } diff --git a/internal/service/route53resolver/config_test.go b/internal/service/route53resolver/config_test.go index 862c2e2177da..bd160f267999 100644 --- a/internal/service/route53resolver/config_test.go +++ b/internal/service/route53resolver/config_test.go @@ -8,7 +8,7 @@ import ( "fmt" "testing" - "github.com/aws/aws-sdk-go/service/route53resolver" + awstypes "github.com/aws/aws-sdk-go-v2/service/route53resolver/types" sdkacctest "github.com/hashicorp/terraform-plugin-testing/helper/acctest" "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/hashicorp/terraform-plugin-testing/terraform" @@ -21,7 +21,7 @@ import ( func TestAccRoute53ResolverConfig_basic(t *testing.T) { ctx := acctest.Context(t) - var v route53resolver.ResolverConfig + var v awstypes.ResolverConfig resourceName := "aws_route53_resolver_config.test" vpcResourceName := "aws_vpc.test" rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) @@ -36,7 +36,7 @@ func TestAccRoute53ResolverConfig_basic(t *testing.T) { Config: testAccConfigConfig_basic(rName, "DISABLE"), Check: resource.ComposeAggregateTestCheckFunc( testAccCheckConfigExists(ctx, resourceName, &v), - resource.TestCheckResourceAttr(resourceName, "autodefined_reverse_flag", "DISABLE"), + resource.TestCheckResourceAttr(resourceName, "autodefined_reverse_flag", string(awstypes.AutodefinedReverseFlagDisable)), acctest.CheckResourceAttrAccountID(resourceName, names.AttrOwnerID), resource.TestCheckResourceAttrPair(resourceName, names.AttrResourceID, vpcResourceName, names.AttrID), ), @@ -50,7 +50,7 @@ func TestAccRoute53ResolverConfig_basic(t *testing.T) { Config: testAccConfigConfig_basic(rName, "ENABLE"), Check: resource.ComposeAggregateTestCheckFunc( testAccCheckConfigExists(ctx, resourceName, &v), - resource.TestCheckResourceAttr(resourceName, "autodefined_reverse_flag", "ENABLE"), + resource.TestCheckResourceAttr(resourceName, "autodefined_reverse_flag", string(awstypes.AutodefinedReverseFlagEnable)), acctest.CheckResourceAttrAccountID(resourceName, names.AttrOwnerID), resource.TestCheckResourceAttrPair(resourceName, names.AttrResourceID, vpcResourceName, names.AttrID), ), @@ -61,7 +61,7 @@ func TestAccRoute53ResolverConfig_basic(t *testing.T) { func TestAccRoute53ResolverConfig_Disappears_vpc(t *testing.T) { ctx := acctest.Context(t) - var v route53resolver.ResolverConfig + var v awstypes.ResolverConfig resourceName := "aws_route53_resolver_config.test" vpcResourceName := "aws_vpc.test" rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) @@ -84,7 +84,7 @@ func TestAccRoute53ResolverConfig_Disappears_vpc(t *testing.T) { }) } -func testAccCheckConfigExists(ctx context.Context, n string, v *route53resolver.ResolverConfig) resource.TestCheckFunc { +func testAccCheckConfigExists(ctx context.Context, n string, v *awstypes.ResolverConfig) resource.TestCheckFunc { return func(s *terraform.State) error { rs, ok := s.RootModule().Resources[n] if !ok { @@ -95,7 +95,7 @@ func testAccCheckConfigExists(ctx context.Context, n string, v *route53resolver. return fmt.Errorf("No Route53 Resolver Config ID is set") } - conn := acctest.Provider.Meta().(*conns.AWSClient).Route53ResolverConn(ctx) + conn := acctest.Provider.Meta().(*conns.AWSClient).Route53ResolverClient(ctx) output, err := tfroute53resolver.FindResolverConfigByID(ctx, conn, rs.Primary.ID) From 35d5e8c686f53d64a17a61dda3cc6159095f250c Mon Sep 17 00:00:00 2001 From: Daniel Rieske Date: Sat, 10 Aug 2024 00:17:51 +0200 Subject: [PATCH 02/32] feat: migrated r/dnssec_config to sdkv2 --- .../service/route53resolver/dnssec_config.go | 114 +++++++++--------- .../route53resolver/dnssec_config_test.go | 7 +- 2 files changed, 64 insertions(+), 57 deletions(-) diff --git a/internal/service/route53resolver/dnssec_config.go b/internal/service/route53resolver/dnssec_config.go index 66ab196b49e3..0c37235fe586 100644 --- a/internal/service/route53resolver/dnssec_config.go +++ b/internal/service/route53resolver/dnssec_config.go @@ -9,21 +9,23 @@ import ( "log" "time" - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/arn" - "github.com/aws/aws-sdk-go/service/route53resolver" - "github.com/hashicorp/aws-sdk-go-base/v2/awsv1shim/v2/tfawserr" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/aws/arn" + "github.com/aws/aws-sdk-go-v2/service/route53resolver" + awstypes "github.com/aws/aws-sdk-go-v2/service/route53resolver/types" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-provider-aws/internal/conns" + "github.com/hashicorp/terraform-provider-aws/internal/enum" + "github.com/hashicorp/terraform-provider-aws/internal/errs" "github.com/hashicorp/terraform-provider-aws/internal/errs/sdkdiag" "github.com/hashicorp/terraform-provider-aws/internal/tfresource" "github.com/hashicorp/terraform-provider-aws/names" ) -// @SDKResource("aws_route53_resolver_dnssec_config") -func ResourceDNSSECConfig() *schema.Resource { +// @SDKResource("aws_route53_resolver_dnssec_config", name="DNSSEC Config") +func resourceDNSSECConfig() *schema.Resource { return &schema.Resource{ CreateWithoutTimeout: resourceDNSSECConfigCreate, ReadWithoutTimeout: resourceDNSSECConfigRead, @@ -48,8 +50,9 @@ func ResourceDNSSECConfig() *schema.Resource { ForceNew: true, }, "validation_status": { - Type: schema.TypeString, - Computed: true, + Type: schema.TypeString, + Computed: true, + ValidateDiagFunc: enum.Validate[awstypes.ResolverDNSSECValidationStatus](), }, }, } @@ -57,20 +60,20 @@ func ResourceDNSSECConfig() *schema.Resource { func resourceDNSSECConfigCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).Route53ResolverConn(ctx) + conn := meta.(*conns.AWSClient).Route53ResolverClient(ctx) input := &route53resolver.UpdateResolverDnssecConfigInput{ ResourceId: aws.String(d.Get(names.AttrResourceID).(string)), - Validation: aws.String(route53resolver.ValidationEnable), + Validation: awstypes.ValidationEnable, } - output, err := conn.UpdateResolverDnssecConfigWithContext(ctx, input) + output, err := conn.UpdateResolverDnssecConfig(ctx, input) if err != nil { return sdkdiag.AppendErrorf(diags, "creating Route53 Resolver DNSSEC Config: %s", err) } - d.SetId(aws.StringValue(output.ResolverDNSSECConfig.Id)) + d.SetId(aws.ToString(output.ResolverDNSSECConfig.Id)) if _, err := waitDNSSECConfigCreated(ctx, conn, d.Id()); err != nil { return sdkdiag.AppendErrorf(diags, "waiting for Route53 Resolver DNSSEC Config (%s) create: %s", d.Id(), err) @@ -81,9 +84,9 @@ func resourceDNSSECConfigCreate(ctx context.Context, d *schema.ResourceData, met func resourceDNSSECConfigRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).Route53ResolverConn(ctx) + conn := meta.(*conns.AWSClient).Route53ResolverClient(ctx) - dnssecConfig, err := FindResolverDNSSECConfigByID(ctx, conn, d.Id()) + dnssecConfig, err := findResolverDNSSECConfigByID(ctx, conn, d.Id()) if !d.IsNewResource() && tfresource.NotFound(err) { log.Printf("[WARN] Route53 Resolver DNSSEC Config (%s) not found, removing from state", d.Id()) @@ -95,8 +98,8 @@ func resourceDNSSECConfigRead(ctx context.Context, d *schema.ResourceData, meta return sdkdiag.AppendErrorf(diags, "reading Route53 Resolver DNSSEC Config (%s): %s", d.Id(), err) } - ownerID := aws.StringValue(dnssecConfig.OwnerId) - resourceID := aws.StringValue(dnssecConfig.ResourceId) + ownerID := aws.ToString(dnssecConfig.OwnerId) + resourceID := aws.ToString(dnssecConfig.ResourceId) arn := arn.ARN{ Partition: meta.(*conns.AWSClient).Partition, Service: "route53resolver", @@ -114,15 +117,15 @@ func resourceDNSSECConfigRead(ctx context.Context, d *schema.ResourceData, meta func resourceDNSSECConfigDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).Route53ResolverConn(ctx) + conn := meta.(*conns.AWSClient).Route53ResolverClient(ctx) log.Printf("[DEBUG] Deleting Route53 Resolver DNSSEC Config: %s", d.Id()) - _, err := conn.UpdateResolverDnssecConfigWithContext(ctx, &route53resolver.UpdateResolverDnssecConfigInput{ + _, err := conn.UpdateResolverDnssecConfig(ctx, &route53resolver.UpdateResolverDnssecConfigInput{ ResourceId: aws.String(d.Get(names.AttrResourceID).(string)), - Validation: aws.String(route53resolver.ValidationDisable), + Validation: awstypes.ValidationDisable, }) - if tfawserr.ErrCodeEquals(err, route53resolver.ErrCodeAccessDeniedException) { + if errs.IsA[*awstypes.AccessDeniedException](err) { // VPC doesn't exist. return diags } @@ -138,48 +141,51 @@ func resourceDNSSECConfigDelete(ctx context.Context, d *schema.ResourceData, met return diags } -func FindResolverDNSSECConfigByID(ctx context.Context, conn *route53resolver.Route53Resolver, id string) (*route53resolver.ResolverDnssecConfig, error) { +func findResolverDNSSECConfigByID(ctx context.Context, conn *route53resolver.Client, id string) (*awstypes.ResolverDnssecConfig, error) { input := &route53resolver.ListResolverDnssecConfigsInput{} - var output *route53resolver.ResolverDnssecConfig + var output *awstypes.ResolverDnssecConfig // GetResolverDnssecConfig does not support query by ID. - err := conn.ListResolverDnssecConfigsPagesWithContext(ctx, input, func(page *route53resolver.ListResolverDnssecConfigsOutput, lastPage bool) bool { - if page == nil { - return !lastPage - } - - for _, v := range page.ResolverDnssecConfigs { - if aws.StringValue(v.Id) == id { - output = v - - return false + pages := route53resolver.NewListResolverDnssecConfigsPaginator(conn, input) + for pages.HasMorePages() { + page, err := pages.NextPage(ctx) + + if errs.IsA[*awstypes.ResourceNotFoundException](err) { + return nil, &retry.NotFoundError{ + LastError: err, + LastRequest: input, } } - return !lastPage - }) + if err != nil { + return nil, err + } - if err != nil { - return nil, err - } + if output == nil { + return nil, tfresource.NewEmptyResultError(input) + } - if output == nil { - return nil, &retry.NotFoundError{LastRequest: input} - } + if validationStatus := output.ValidationStatus; validationStatus == awstypes.ResolverDNSSECValidationStatusDisabled { + return nil, &retry.NotFoundError{ + Message: string(validationStatus), + LastRequest: input, + } + } - if validationStatus := aws.StringValue(output.ValidationStatus); validationStatus == route53resolver.ResolverDNSSECValidationStatusDisabled { - return nil, &retry.NotFoundError{ - Message: validationStatus, - LastRequest: input, + for _, v := range page.ResolverDnssecConfigs { + if aws.ToString(v.Id) == id { + output = &v + break + } } } return output, nil } -func statusDNSSECConfig(ctx context.Context, conn *route53resolver.Route53Resolver, id string) retry.StateRefreshFunc { +func statusDNSSECConfig(ctx context.Context, conn *route53resolver.Client, id string) retry.StateRefreshFunc { return func() (interface{}, string, error) { - output, err := FindResolverDNSSECConfigByID(ctx, conn, id) + output, err := findResolverDNSSECConfigByID(ctx, conn, id) if tfresource.NotFound(err) { return nil, "", nil @@ -189,7 +195,7 @@ func statusDNSSECConfig(ctx context.Context, conn *route53resolver.Route53Resolv return nil, "", err } - return output, aws.StringValue(output.ValidationStatus), nil + return output, string(output.ValidationStatus), nil } } @@ -198,26 +204,26 @@ const ( dnssecConfigDeletedTimeout = 10 * time.Minute ) -func waitDNSSECConfigCreated(ctx context.Context, conn *route53resolver.Route53Resolver, id string) (*route53resolver.ResolverDnssecConfig, error) { +func waitDNSSECConfigCreated(ctx context.Context, conn *route53resolver.Client, id string) (*awstypes.ResolverDnssecConfig, error) { stateConf := &retry.StateChangeConf{ - Pending: []string{route53resolver.ResolverDNSSECValidationStatusEnabling}, - Target: []string{route53resolver.ResolverDNSSECValidationStatusEnabled}, + Pending: enum.Slice(awstypes.ResolverDNSSECValidationStatusEnabling), + Target: enum.Slice(awstypes.ResolverDNSSECValidationStatusEnabled), Refresh: statusDNSSECConfig(ctx, conn, id), Timeout: dnssecConfigCreatedTimeout, } outputRaw, err := stateConf.WaitForStateContext(ctx) - if output, ok := outputRaw.(*route53resolver.ResolverDnssecConfig); ok { + if output, ok := outputRaw.(*awstypes.ResolverDnssecConfig); ok { return output, err } return nil, err } -func waitDNSSECConfigDeleted(ctx context.Context, conn *route53resolver.Route53Resolver, id string) (*route53resolver.ResolverDnssecConfig, error) { +func waitDNSSECConfigDeleted(ctx context.Context, conn *route53resolver.Client, id string) (*awstypes.ResolverDnssecConfig, error) { stateConf := &retry.StateChangeConf{ - Pending: []string{route53resolver.ResolverDNSSECValidationStatusDisabling}, + Pending: enum.Slice(awstypes.ResolverDNSSECValidationStatusDisabling), Target: []string{}, Refresh: statusDNSSECConfig(ctx, conn, id), Timeout: dnssecConfigDeletedTimeout, @@ -225,7 +231,7 @@ func waitDNSSECConfigDeleted(ctx context.Context, conn *route53resolver.Route53R outputRaw, err := stateConf.WaitForStateContext(ctx) - if output, ok := outputRaw.(*route53resolver.ResolverDnssecConfig); ok { + if output, ok := outputRaw.(*awstypes.ResolverDnssecConfig); ok { return output, err } diff --git a/internal/service/route53resolver/dnssec_config_test.go b/internal/service/route53resolver/dnssec_config_test.go index 8aba774317d6..6859c9ae6cfe 100644 --- a/internal/service/route53resolver/dnssec_config_test.go +++ b/internal/service/route53resolver/dnssec_config_test.go @@ -9,6 +9,7 @@ import ( "testing" "github.com/YakDriver/regexache" + awstypes "github.com/aws/aws-sdk-go-v2/service/route53resolver/types" sdkacctest "github.com/hashicorp/terraform-plugin-testing/helper/acctest" "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/hashicorp/terraform-plugin-testing/terraform" @@ -38,7 +39,7 @@ func TestAccRoute53ResolverDNSSECConfig_basic(t *testing.T) { resource.TestCheckResourceAttrSet(resourceName, names.AttrID), resource.TestCheckResourceAttrSet(resourceName, names.AttrOwnerID), resource.TestCheckResourceAttrSet(resourceName, names.AttrResourceID), - resource.TestCheckResourceAttr(resourceName, "validation_status", "ENABLED"), + resource.TestCheckResourceAttr(resourceName, "validation_status", string(awstypes.ResolverDNSSECValidationStatusEnabled)), ), }, { @@ -75,7 +76,7 @@ func TestAccRoute53ResolverDNSSECConfig_disappear(t *testing.T) { func testAccCheckDNSSECConfigDestroy(ctx context.Context) resource.TestCheckFunc { return func(s *terraform.State) error { - conn := acctest.Provider.Meta().(*conns.AWSClient).Route53ResolverConn(ctx) + conn := acctest.Provider.Meta().(*conns.AWSClient).Route53ResolverClient(ctx) for _, rs := range s.RootModule().Resources { if rs.Type != "aws_route53_resolver_dnssec_config" { @@ -110,7 +111,7 @@ func testAccCheckDNSSECConfigExists(ctx context.Context, n string) resource.Test return fmt.Errorf("No Route53 Resolver DNSSEC Config ID is set") } - conn := acctest.Provider.Meta().(*conns.AWSClient).Route53ResolverConn(ctx) + conn := acctest.Provider.Meta().(*conns.AWSClient).Route53ResolverClient(ctx) _, err := tfroute53resolver.FindResolverDNSSECConfigByID(ctx, conn, rs.Primary.ID) From cce630dff41672b26595f8f441894a34f0894d1e Mon Sep 17 00:00:00 2001 From: Daniel Rieske Date: Sat, 10 Aug 2024 00:18:55 +0200 Subject: [PATCH 03/32] feat: migrated r/endpoint to sdkv2 --- internal/service/route53resolver/endpoint.go | 150 +++++++++--------- .../service/route53resolver/endpoint_test.go | 23 +-- 2 files changed, 86 insertions(+), 87 deletions(-) diff --git a/internal/service/route53resolver/endpoint.go b/internal/service/route53resolver/endpoint.go index 36d7a6477b52..0d7b6ccf9838 100644 --- a/internal/service/route53resolver/endpoint.go +++ b/internal/service/route53resolver/endpoint.go @@ -11,9 +11,9 @@ import ( "log" "time" - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/service/route53resolver" - "github.com/hashicorp/aws-sdk-go-base/v2/awsv1shim/v2/tfawserr" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/route53resolver" + awstypes "github.com/aws/aws-sdk-go-v2/service/route53resolver/types" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/id" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry" @@ -21,6 +21,8 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/hashicorp/terraform-provider-aws/internal/conns" "github.com/hashicorp/terraform-provider-aws/internal/create" + "github.com/hashicorp/terraform-provider-aws/internal/enum" + "github.com/hashicorp/terraform-provider-aws/internal/errs" "github.com/hashicorp/terraform-provider-aws/internal/errs/sdkdiag" "github.com/hashicorp/terraform-provider-aws/internal/flex" tftags "github.com/hashicorp/terraform-provider-aws/internal/tags" @@ -31,7 +33,7 @@ import ( // @SDKResource("aws_route53_resolver_endpoint", name="Endpoint") // @Tags(identifierAttribute="arn") -func ResourceEndpoint() *schema.Resource { +func resourceEndpoint() *schema.Resource { return &schema.Resource{ CreateWithoutTimeout: resourceEndpointCreate, ReadWithoutTimeout: resourceEndpointRead, @@ -48,10 +50,10 @@ func ResourceEndpoint() *schema.Resource { Computed: true, }, "direction": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - ValidateFunc: validation.StringInSlice(route53resolver.ResolverEndpointDirection_Values(), false), + Type: schema.TypeString, + Required: true, + ForceNew: true, + ValidateDiagFunc: enum.Validate[awstypes.ResolverEndpointDirection](), }, "host_vpc_id": { Type: schema.TypeString, @@ -88,10 +90,10 @@ func ResourceEndpoint() *schema.Resource { ValidateFunc: validResolverName, }, "resolver_endpoint_type": { - Type: schema.TypeString, - Optional: true, - Computed: true, - ValidateFunc: validation.StringInSlice(route53resolver.ResolverEndpointType_Values(), false), + Type: schema.TypeString, + Optional: true, + Computed: true, + ValidateDiagFunc: enum.Validate[awstypes.ResolverEndpointType](), }, names.AttrSecurityGroupIDs: { Type: schema.TypeSet, @@ -108,8 +110,8 @@ func ResourceEndpoint() *schema.Resource { MinItems: 1, MaxItems: 2, Elem: &schema.Schema{ - Type: schema.TypeString, - ValidateFunc: validation.StringInSlice(route53resolver.Protocol_Values(), false), + Type: schema.TypeString, + ValidateDiagFunc: enum.Validate[awstypes.Protocol](), }, }, names.AttrTags: tftags.TagsSchema(), @@ -128,13 +130,13 @@ func ResourceEndpoint() *schema.Resource { func resourceEndpointCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).Route53ResolverConn(ctx) + conn := meta.(*conns.AWSClient).Route53ResolverClient(ctx) input := &route53resolver.CreateResolverEndpointInput{ CreatorRequestId: aws.String(id.PrefixedUniqueId("tf-r53-resolver-endpoint-")), - Direction: aws.String(d.Get("direction").(string)), + Direction: awstypes.ResolverEndpointDirection(d.Get("direction").(string)), IpAddresses: expandEndpointIPAddresses(d.Get(names.AttrIPAddress).(*schema.Set)), - SecurityGroupIds: flex.ExpandStringSet(d.Get(names.AttrSecurityGroupIDs).(*schema.Set)), + SecurityGroupIds: flex.ExpandStringValueSet(d.Get(names.AttrSecurityGroupIDs).(*schema.Set)), Tags: getTagsIn(ctx), } @@ -143,20 +145,20 @@ func resourceEndpointCreate(ctx context.Context, d *schema.ResourceData, meta in } if v, ok := d.GetOk("protocols"); ok && v.(*schema.Set).Len() > 0 { - input.Protocols = flex.ExpandStringSet(v.(*schema.Set)) + input.Protocols = flex.ExpandStringyValueSet[awstypes.Protocol](v.(*schema.Set)) } if v, ok := d.GetOk("resolver_endpoint_type"); ok { - input.ResolverEndpointType = aws.String(v.(string)) + input.ResolverEndpointType = awstypes.ResolverEndpointType(v.(string)) } - output, err := conn.CreateResolverEndpointWithContext(ctx, input) + output, err := conn.CreateResolverEndpoint(ctx, input) if err != nil { return sdkdiag.AppendErrorf(diags, "creating Route53 Resolver Endpoint: %s", err) } - d.SetId(aws.StringValue(output.ResolverEndpoint.Id)) + d.SetId(aws.ToString(output.ResolverEndpoint.Id)) if _, err := waitEndpointCreated(ctx, conn, d.Id(), d.Timeout(schema.TimeoutCreate)); err != nil { return sdkdiag.AppendErrorf(diags, "waiting for Route53 Resolver Endpoint (%s) create: %s", d.Id(), err) @@ -167,9 +169,9 @@ func resourceEndpointCreate(ctx context.Context, d *schema.ResourceData, meta in func resourceEndpointRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).Route53ResolverConn(ctx) + conn := meta.(*conns.AWSClient).Route53ResolverClient(ctx) - ep, err := FindResolverEndpointByID(ctx, conn, d.Id()) + ep, err := findResolverEndpointByID(ctx, conn, d.Id()) if !d.IsNewResource() && tfresource.NotFound(err) { log.Printf("[WARN] Route53 Resolver Endpoint (%s) not found, removing from state", d.Id()) @@ -181,14 +183,13 @@ func resourceEndpointRead(ctx context.Context, d *schema.ResourceData, meta inte return sdkdiag.AppendErrorf(diags, "reading Route53 Resolver Endpoint (%s): %s", d.Id(), err) } - arn := aws.StringValue(ep.Arn) - d.Set(names.AttrARN, arn) + d.Set(names.AttrARN, aws.ToString(ep.Arn)) d.Set("direction", ep.Direction) d.Set("host_vpc_id", ep.HostVPCId) d.Set(names.AttrName, ep.Name) - d.Set("protocols", aws.StringValueSlice(ep.Protocols)) + d.Set("protocols", flex.FlattenStringyValueSet[awstypes.Protocol](ep.Protocols)) d.Set("resolver_endpoint_type", ep.ResolverEndpointType) - d.Set(names.AttrSecurityGroupIDs, aws.StringValueSlice(ep.SecurityGroupIds)) + d.Set(names.AttrSecurityGroupIDs, ep.SecurityGroupIds) ipAddresses, err := findResolverEndpointIPAddressesByID(ctx, conn, d.Id()) @@ -205,7 +206,7 @@ func resourceEndpointRead(ctx context.Context, d *schema.ResourceData, meta inte func resourceEndpointUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).Route53ResolverConn(ctx) + conn := meta.(*conns.AWSClient).Route53ResolverClient(ctx) if d.HasChanges(names.AttrName, "protocols", "resolver_endpoint_type") { input := &route53resolver.UpdateResolverEndpointInput{ @@ -217,14 +218,14 @@ func resourceEndpointUpdate(ctx context.Context, d *schema.ResourceData, meta in } if d.HasChange("protocols") { - input.Protocols = flex.ExpandStringSet(d.Get("protocols").(*schema.Set)) + input.Protocols = flex.ExpandStringyValueSet[awstypes.Protocol](d.Get("protocols").(*schema.Set)) } if d.HasChange("resolver_endpoint_type") { - input.ResolverEndpointType = aws.String(d.Get("resolver_endpoint_type").(string)) + input.ResolverEndpointType = awstypes.ResolverEndpointType(d.Get("resolver_endpoint_type").(string)) } - _, err := conn.UpdateResolverEndpointWithContext(ctx, input) + _, err := conn.UpdateResolverEndpoint(ctx, input) if err != nil { return sdkdiag.AppendErrorf(diags, "updating Route53 Resolver Endpoint (%s): %s", d.Id(), err) @@ -249,7 +250,7 @@ func resourceEndpointUpdate(ctx context.Context, d *schema.ResourceData, meta in ResolverEndpointId: aws.String(d.Id()), } - _, err := conn.AssociateResolverEndpointIpAddressWithContext(ctx, input) + _, err := conn.AssociateResolverEndpointIpAddress(ctx, input) if err != nil { return sdkdiag.AppendErrorf(diags, "associating Route53 Resolver Endpoint (%s) IP address: %s", d.Id(), err) @@ -266,7 +267,7 @@ func resourceEndpointUpdate(ctx context.Context, d *schema.ResourceData, meta in ResolverEndpointId: aws.String(d.Id()), } - _, err := conn.DisassociateResolverEndpointIpAddressWithContext(ctx, input) + _, err := conn.DisassociateResolverEndpointIpAddress(ctx, input) if err != nil { return sdkdiag.AppendErrorf(diags, "disassociating Route53 Resolver Endpoint (%s) IP address: %s", d.Id(), err) @@ -283,14 +284,14 @@ func resourceEndpointUpdate(ctx context.Context, d *schema.ResourceData, meta in func resourceEndpointDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).Route53ResolverConn(ctx) + conn := meta.(*conns.AWSClient).Route53ResolverClient(ctx) log.Printf("[DEBUG] Deleting Route53 Resolver Endpoint: %s", d.Id()) - _, err := conn.DeleteResolverEndpointWithContext(ctx, &route53resolver.DeleteResolverEndpointInput{ + _, err := conn.DeleteResolverEndpoint(ctx, &route53resolver.DeleteResolverEndpointInput{ ResolverEndpointId: aws.String(d.Id()), }) - if tfawserr.ErrCodeEquals(err, route53resolver.ErrCodeResourceNotFoundException) { + if errs.IsA[*awstypes.ResourceNotFoundException](err) { return diags } @@ -305,14 +306,14 @@ func resourceEndpointDelete(ctx context.Context, d *schema.ResourceData, meta in return diags } -func FindResolverEndpointByID(ctx context.Context, conn *route53resolver.Route53Resolver, id string) (*route53resolver.ResolverEndpoint, error) { +func findResolverEndpointByID(ctx context.Context, conn *route53resolver.Client, id string) (*awstypes.ResolverEndpoint, error) { input := &route53resolver.GetResolverEndpointInput{ ResolverEndpointId: aws.String(id), } - output, err := conn.GetResolverEndpointWithContext(ctx, input) + output, err := conn.GetResolverEndpoint(ctx, input) - if tfawserr.ErrCodeEquals(err, route53resolver.ErrCodeResourceNotFoundException) { + if errs.IsA[*awstypes.ResourceNotFoundException](err) { return nil, &retry.NotFoundError{ LastError: err, LastRequest: input, @@ -330,32 +331,29 @@ func FindResolverEndpointByID(ctx context.Context, conn *route53resolver.Route53 return output.ResolverEndpoint, nil } -func findResolverEndpointIPAddressesByID(ctx context.Context, conn *route53resolver.Route53Resolver, id string) ([]*route53resolver.IpAddressResponse, error) { +func findResolverEndpointIPAddressesByID(ctx context.Context, conn *route53resolver.Client, id string) ([]awstypes.IpAddressResponse, error) { input := &route53resolver.ListResolverEndpointIpAddressesInput{ ResolverEndpointId: aws.String(id), } - var output []*route53resolver.IpAddressResponse + var output []awstypes.IpAddressResponse - err := conn.ListResolverEndpointIpAddressesPagesWithContext(ctx, input, func(page *route53resolver.ListResolverEndpointIpAddressesOutput, lastPage bool) bool { - if page == nil { - return !lastPage + pages := route53resolver.NewListResolverEndpointIpAddressesPaginator(conn, input) + for pages.HasMorePages() { + page, err := pages.NextPage(ctx) + + if err != nil { + return nil, err } output = append(output, page.IpAddresses...) - - return !lastPage - }) - - if err != nil { - return nil, err } return output, nil } -func statusEndpoint(ctx context.Context, conn *route53resolver.Route53Resolver, id string) retry.StateRefreshFunc { +func statusEndpoint(ctx context.Context, conn *route53resolver.Client, id string) retry.StateRefreshFunc { return func() (interface{}, string, error) { - output, err := FindResolverEndpointByID(ctx, conn, id) + output, err := findResolverEndpointByID(ctx, conn, id) if tfresource.NotFound(err) { return nil, "", nil @@ -365,14 +363,14 @@ func statusEndpoint(ctx context.Context, conn *route53resolver.Route53Resolver, return nil, "", err } - return output, aws.StringValue(output.Status), nil + return output, string(output.Status), nil } } -func waitEndpointCreated(ctx context.Context, conn *route53resolver.Route53Resolver, id string, timeout time.Duration) (*route53resolver.ResolverEndpoint, error) { +func waitEndpointCreated(ctx context.Context, conn *route53resolver.Client, id string, timeout time.Duration) (*awstypes.ResolverEndpoint, error) { stateConf := &retry.StateChangeConf{ - Pending: []string{route53resolver.ResolverEndpointStatusCreating}, - Target: []string{route53resolver.ResolverEndpointStatusOperational}, + Pending: enum.Slice(awstypes.ResolverEndpointStatusCreating), + Target: enum.Slice(awstypes.ResolverEndpointStatusOperational), Refresh: statusEndpoint(ctx, conn, id), Timeout: timeout, Delay: 10 * time.Second, @@ -381,8 +379,8 @@ func waitEndpointCreated(ctx context.Context, conn *route53resolver.Route53Resol outputRaw, err := stateConf.WaitForStateContext(ctx) - if output, ok := outputRaw.(*route53resolver.ResolverEndpoint); ok { - tfresource.SetLastError(err, errors.New(aws.StringValue(output.StatusMessage))) + if output, ok := outputRaw.(*awstypes.ResolverEndpoint); ok { + tfresource.SetLastError(err, errors.New(aws.ToString(output.StatusMessage))) return output, err } @@ -390,10 +388,10 @@ func waitEndpointCreated(ctx context.Context, conn *route53resolver.Route53Resol return nil, err } -func waitEndpointUpdated(ctx context.Context, conn *route53resolver.Route53Resolver, id string, timeout time.Duration) (*route53resolver.ResolverEndpoint, error) { //nolint:unparam +func waitEndpointUpdated(ctx context.Context, conn *route53resolver.Client, id string, timeout time.Duration) (*awstypes.ResolverEndpoint, error) { //nolint:unparam stateConf := &retry.StateChangeConf{ - Pending: []string{route53resolver.ResolverEndpointStatusUpdating}, - Target: []string{route53resolver.ResolverEndpointStatusOperational}, + Pending: enum.Slice(awstypes.ResolverEndpointStatusUpdating), + Target: enum.Slice(awstypes.ResolverEndpointStatusOperational), Refresh: statusEndpoint(ctx, conn, id), Timeout: timeout, Delay: 10 * time.Second, @@ -402,8 +400,8 @@ func waitEndpointUpdated(ctx context.Context, conn *route53resolver.Route53Resol outputRaw, err := stateConf.WaitForStateContext(ctx) - if output, ok := outputRaw.(*route53resolver.ResolverEndpoint); ok { - tfresource.SetLastError(err, errors.New(aws.StringValue(output.StatusMessage))) + if output, ok := outputRaw.(*awstypes.ResolverEndpoint); ok { + tfresource.SetLastError(err, errors.New(aws.ToString(output.StatusMessage))) return output, err } @@ -411,9 +409,9 @@ func waitEndpointUpdated(ctx context.Context, conn *route53resolver.Route53Resol return nil, err } -func waitEndpointDeleted(ctx context.Context, conn *route53resolver.Route53Resolver, id string, timeout time.Duration) (*route53resolver.ResolverEndpoint, error) { +func waitEndpointDeleted(ctx context.Context, conn *route53resolver.Client, id string, timeout time.Duration) (*awstypes.ResolverEndpoint, error) { stateConf := &retry.StateChangeConf{ - Pending: []string{route53resolver.ResolverEndpointStatusDeleting}, + Pending: enum.Slice(awstypes.ResolverEndpointStatusDeleting), Target: []string{}, Refresh: statusEndpoint(ctx, conn, id), Timeout: timeout, @@ -423,8 +421,8 @@ func waitEndpointDeleted(ctx context.Context, conn *route53resolver.Route53Resol outputRaw, err := stateConf.WaitForStateContext(ctx) - if output, ok := outputRaw.(*route53resolver.ResolverEndpoint); ok { - tfresource.SetLastError(err, errors.New(aws.StringValue(output.StatusMessage))) + if output, ok := outputRaw.(*awstypes.ResolverEndpoint); ok { + tfresource.SetLastError(err, errors.New(aws.ToString(output.StatusMessage))) return output, err } @@ -439,8 +437,8 @@ func endpointHashIPAddress(v interface{}) int { return create.StringHashcode(buf.String()) } -func expandEndpointIPAddressUpdate(vIpAddress interface{}) *route53resolver.IpAddressUpdate { - ipAddressUpdate := &route53resolver.IpAddressUpdate{} +func expandEndpointIPAddressUpdate(vIpAddress interface{}) *awstypes.IpAddressUpdate { + ipAddressUpdate := &awstypes.IpAddressUpdate{} mIpAddress := vIpAddress.(map[string]interface{}) @@ -457,11 +455,11 @@ func expandEndpointIPAddressUpdate(vIpAddress interface{}) *route53resolver.IpAd return ipAddressUpdate } -func expandEndpointIPAddresses(vIpAddresses *schema.Set) []*route53resolver.IpAddressRequest { - ipAddressRequests := []*route53resolver.IpAddressRequest{} +func expandEndpointIPAddresses(vIpAddresses *schema.Set) []awstypes.IpAddressRequest { + ipAddressRequests := []awstypes.IpAddressRequest{} for _, vIpAddress := range vIpAddresses.List() { - ipAddressRequest := &route53resolver.IpAddressRequest{} + ipAddressRequest := awstypes.IpAddressRequest{} mIpAddress := vIpAddress.(map[string]interface{}) @@ -478,7 +476,7 @@ func expandEndpointIPAddresses(vIpAddresses *schema.Set) []*route53resolver.IpAd return ipAddressRequests } -func flattenEndpointIPAddresses(ipAddresses []*route53resolver.IpAddressResponse) []interface{} { +func flattenEndpointIPAddresses(ipAddresses []awstypes.IpAddressResponse) []interface{} { if ipAddresses == nil { return []interface{}{} } @@ -487,9 +485,9 @@ func flattenEndpointIPAddresses(ipAddresses []*route53resolver.IpAddressResponse for _, ipAddress := range ipAddresses { mIpAddress := map[string]interface{}{ - names.AttrSubnetID: aws.StringValue(ipAddress.SubnetId), - "ip": aws.StringValue(ipAddress.Ip), - "ip_id": aws.StringValue(ipAddress.IpId), + names.AttrSubnetID: aws.ToString(ipAddress.SubnetId), + "ip": aws.ToString(ipAddress.Ip), + "ip_id": aws.ToString(ipAddress.IpId), } vIpAddresses = append(vIpAddresses, mIpAddress) diff --git a/internal/service/route53resolver/endpoint_test.go b/internal/service/route53resolver/endpoint_test.go index c1575a771756..5b63f7b46a1a 100644 --- a/internal/service/route53resolver/endpoint_test.go +++ b/internal/service/route53resolver/endpoint_test.go @@ -8,7 +8,8 @@ import ( "fmt" "testing" - "github.com/aws/aws-sdk-go/service/route53resolver" + "github.com/aws/aws-sdk-go-v2/service/route53resolver" + awstypes "github.com/aws/aws-sdk-go-v2/service/route53resolver/types" sdkacctest "github.com/hashicorp/terraform-plugin-testing/helper/acctest" "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/hashicorp/terraform-plugin-testing/terraform" @@ -21,7 +22,7 @@ import ( func TestAccRoute53ResolverEndpoint_basic(t *testing.T) { ctx := acctest.Context(t) - var ep route53resolver.ResolverEndpoint + var ep awstypes.ResolverEndpoint resourceName := "aws_route53_resolver_endpoint.test" vpcResourceName := "aws_vpc.test" rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) @@ -58,7 +59,7 @@ func TestAccRoute53ResolverEndpoint_basic(t *testing.T) { func TestAccRoute53ResolverEndpoint_disappears(t *testing.T) { ctx := acctest.Context(t) - var ep route53resolver.ResolverEndpoint + var ep awstypes.ResolverEndpoint resourceName := "aws_route53_resolver_endpoint.test" rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) @@ -82,7 +83,7 @@ func TestAccRoute53ResolverEndpoint_disappears(t *testing.T) { func TestAccRoute53ResolverEndpoint_tags(t *testing.T) { ctx := acctest.Context(t) - var ep route53resolver.ResolverEndpoint + var ep awstypes.ResolverEndpoint resourceName := "aws_route53_resolver_endpoint.test" rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) @@ -128,7 +129,7 @@ func TestAccRoute53ResolverEndpoint_tags(t *testing.T) { func TestAccRoute53ResolverEndpoint_updateOutbound(t *testing.T) { ctx := acctest.Context(t) - var ep route53resolver.ResolverEndpoint + var ep awstypes.ResolverEndpoint resourceName := "aws_route53_resolver_endpoint.test" rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) initialName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) @@ -166,7 +167,7 @@ func TestAccRoute53ResolverEndpoint_updateOutbound(t *testing.T) { func TestAccRoute53ResolverEndpoint_resolverEndpointType(t *testing.T) { ctx := acctest.Context(t) - var ep route53resolver.ResolverEndpoint + var ep awstypes.ResolverEndpoint resourceName := "aws_route53_resolver_endpoint.test" rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) @@ -196,7 +197,7 @@ func TestAccRoute53ResolverEndpoint_resolverEndpointType(t *testing.T) { func testAccCheckEndpointDestroy(ctx context.Context) resource.TestCheckFunc { return func(s *terraform.State) error { - conn := acctest.Provider.Meta().(*conns.AWSClient).Route53ResolverConn(ctx) + conn := acctest.Provider.Meta().(*conns.AWSClient).Route53ResolverClient(ctx) for _, rs := range s.RootModule().Resources { if rs.Type != "aws_route53_resolver_endpoint" { @@ -220,7 +221,7 @@ func testAccCheckEndpointDestroy(ctx context.Context) resource.TestCheckFunc { } } -func testAccCheckEndpointExists(ctx context.Context, n string, v *route53resolver.ResolverEndpoint) resource.TestCheckFunc { +func testAccCheckEndpointExists(ctx context.Context, n string, v *awstypes.ResolverEndpoint) resource.TestCheckFunc { return func(s *terraform.State) error { rs, ok := s.RootModule().Resources[n] if !ok { @@ -231,7 +232,7 @@ func testAccCheckEndpointExists(ctx context.Context, n string, v *route53resolve return fmt.Errorf("No Route53 Resolver Endpoint ID is set") } - conn := acctest.Provider.Meta().(*conns.AWSClient).Route53ResolverConn(ctx) + conn := acctest.Provider.Meta().(*conns.AWSClient).Route53ResolverClient(ctx) output, err := tfroute53resolver.FindResolverEndpointByID(ctx, conn, rs.Primary.ID) @@ -246,11 +247,11 @@ func testAccCheckEndpointExists(ctx context.Context, n string, v *route53resolve } func testAccPreCheck(ctx context.Context, t *testing.T) { - conn := acctest.Provider.Meta().(*conns.AWSClient).Route53ResolverConn(ctx) + conn := acctest.Provider.Meta().(*conns.AWSClient).Route53ResolverClient(ctx) input := &route53resolver.ListResolverEndpointsInput{} - _, err := conn.ListResolverEndpointsWithContext(ctx, input) + _, err := conn.ListResolverEndpoints(ctx, input) if acctest.PreCheckSkipError(err) { t.Skipf("skipping acceptance testing: %s", err) From 02549cbf6e3562ee556233ef122ca1dc31890031 Mon Sep 17 00:00:00 2001 From: Daniel Rieske Date: Sat, 10 Aug 2024 00:19:09 +0200 Subject: [PATCH 04/32] feat: migrated d/endpoint to sdkv2 --- .../route53resolver/endpoint_data_source.go | 47 +++++++++---------- 1 file changed, 23 insertions(+), 24 deletions(-) diff --git a/internal/service/route53resolver/endpoint_data_source.go b/internal/service/route53resolver/endpoint_data_source.go index 1467e03fe54c..6efe5af83617 100644 --- a/internal/service/route53resolver/endpoint_data_source.go +++ b/internal/service/route53resolver/endpoint_data_source.go @@ -6,17 +6,19 @@ package route53resolver import ( "context" - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/service/route53resolver" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/route53resolver" + awstypes "github.com/aws/aws-sdk-go-v2/service/route53resolver/types" "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" "github.com/hashicorp/terraform-provider-aws/internal/errs/sdkdiag" + "github.com/hashicorp/terraform-provider-aws/internal/flex" "github.com/hashicorp/terraform-provider-aws/names" ) -// @SDKDataSource("aws_route53_resolver_endpoint") -func DataSourceEndpoint() *schema.Resource { +// @SDKDataSource("aws_route53_resolver_endpoint", name="Endpoint") +func dataSourceEndpoint() *schema.Resource { return &schema.Resource{ ReadWithoutTimeout: dataSourceEndpointRead, @@ -83,7 +85,7 @@ func DataSourceEndpoint() *schema.Resource { func dataSourceEndpointRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).Route53ResolverConn(ctx) + conn := meta.(*conns.AWSClient).Route53ResolverClient(ctx) endpointID := d.Get("resolver_endpoint_id").(string) input := &route53resolver.ListResolverEndpointsInput{} @@ -92,28 +94,25 @@ func dataSourceEndpointRead(ctx context.Context, d *schema.ResourceData, meta in input.Filters = buildR53ResolverTagFilters(v.(*schema.Set)) } - var endpoints []*route53resolver.ResolverEndpoint + var endpoints []awstypes.ResolverEndpoint - err := conn.ListResolverEndpointsPagesWithContext(ctx, input, func(page *route53resolver.ListResolverEndpointsOutput, lastPage bool) bool { - if page == nil { - return !lastPage + pages := route53resolver.NewListResolverEndpointsPaginator(conn, input) + for pages.HasMorePages() { + page, err := pages.NextPage(ctx) + + if err != nil { + return sdkdiag.AppendErrorf(diags, "listing Route53 Resolver Endpoints: %s", err) } for _, v := range page.ResolverEndpoints { if endpointID != "" { - if aws.StringValue(v.Id) == endpointID { + if aws.ToString(v.Id) == endpointID { endpoints = append(endpoints, v) } } else { endpoints = append(endpoints, v) } } - - return !lastPage - }) - - if err != nil { - return sdkdiag.AppendErrorf(diags, "listing Route53 Resolver Endpoints: %s", err) } if n := len(endpoints); n == 0 { @@ -123,11 +122,11 @@ func dataSourceEndpointRead(ctx context.Context, d *schema.ResourceData, meta in } ep := endpoints[0] - d.SetId(aws.StringValue(ep.Id)) + d.SetId(aws.ToString(ep.Id)) d.Set(names.AttrARN, ep.Arn) d.Set("direction", ep.Direction) d.Set(names.AttrName, ep.Name) - d.Set("protocols", aws.StringValueSlice(ep.Protocols)) + d.Set("protocols", flex.FlattenStringyValueSet(ep.Protocols)) d.Set("resolver_endpoint_id", ep.Id) d.Set("resolver_endpoint_type", ep.ResolverEndpointType) d.Set(names.AttrStatus, ep.Status) @@ -145,21 +144,21 @@ func dataSourceEndpointRead(ctx context.Context, d *schema.ResourceData, meta in ips = append(ips, v.Ip) } - d.Set(names.AttrIPAddresses, aws.StringValueSlice(ips)) + d.Set(names.AttrIPAddresses, aws.ToStringSlice(ips)) return diags } -func buildR53ResolverTagFilters(set *schema.Set) []*route53resolver.Filter { - var filters []*route53resolver.Filter +func buildR53ResolverTagFilters(set *schema.Set) []awstypes.Filter { + var filters []awstypes.Filter for _, v := range set.List() { m := v.(map[string]interface{}) - var filterValues []*string + var filterValues []string for _, e := range m[names.AttrValues].([]interface{}) { - filterValues = append(filterValues, aws.String(e.(string))) + filterValues = append(filterValues, e.(string)) } - filters = append(filters, &route53resolver.Filter{ + filters = append(filters, awstypes.Filter{ Name: aws.String(m[names.AttrName].(string)), Values: filterValues, }) From fb79cab3ac6fd342ab34ec983c144345e7d9efab Mon Sep 17 00:00:00 2001 From: Daniel Rieske Date: Sat, 10 Aug 2024 00:19:32 +0200 Subject: [PATCH 05/32] feat: migrated r/firewall_config to sdkv2 --- .../route53resolver/firewall_config.go | 72 +++++++++---------- .../route53resolver/firewall_config_test.go | 15 ++-- 2 files changed, 41 insertions(+), 46 deletions(-) diff --git a/internal/service/route53resolver/firewall_config.go b/internal/service/route53resolver/firewall_config.go index b7964b6e490c..2dfef45b4b1c 100644 --- a/internal/service/route53resolver/firewall_config.go +++ b/internal/service/route53resolver/firewall_config.go @@ -7,20 +7,20 @@ import ( "context" "log" - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/service/route53resolver" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/route53resolver" + awstypes "github.com/aws/aws-sdk-go-v2/service/route53resolver/types" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/hashicorp/terraform-provider-aws/internal/conns" + "github.com/hashicorp/terraform-provider-aws/internal/enum" "github.com/hashicorp/terraform-provider-aws/internal/errs/sdkdiag" "github.com/hashicorp/terraform-provider-aws/internal/tfresource" "github.com/hashicorp/terraform-provider-aws/names" ) -// @SDKResource("aws_route53_resolver_firewall_config") -func ResourceFirewallConfig() *schema.Resource { +// @SDKResource("aws_route53_resolver_firewall_config", name="Firewall Config") +func resourceFirewallConfig() *schema.Resource { return &schema.Resource{ CreateWithoutTimeout: resourceFirewallConfigCreate, ReadWithoutTimeout: resourceFirewallConfigRead, @@ -33,10 +33,10 @@ func ResourceFirewallConfig() *schema.Resource { Schema: map[string]*schema.Schema{ "firewall_fail_open": { - Type: schema.TypeString, - Optional: true, - Computed: true, - ValidateFunc: validation.StringInSlice(route53resolver.FirewallFailOpenStatus_Values(), false), + Type: schema.TypeString, + Optional: true, + Computed: true, + ValidateDiagFunc: enum.Validate[awstypes.FirewallFailOpenStatus](), }, names.AttrOwnerID: { Type: schema.TypeString, @@ -53,32 +53,32 @@ func ResourceFirewallConfig() *schema.Resource { func resourceFirewallConfigCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).Route53ResolverConn(ctx) + conn := meta.(*conns.AWSClient).Route53ResolverClient(ctx) input := &route53resolver.UpdateFirewallConfigInput{ ResourceId: aws.String(d.Get(names.AttrResourceID).(string)), } if v, ok := d.GetOk("firewall_fail_open"); ok { - input.FirewallFailOpen = aws.String(v.(string)) + input.FirewallFailOpen = awstypes.FirewallFailOpenStatus(v.(string)) } - output, err := conn.UpdateFirewallConfigWithContext(ctx, input) + output, err := conn.UpdateFirewallConfig(ctx, input) if err != nil { return sdkdiag.AppendErrorf(diags, "creating Route53 Resolver Firewall Config: %s", err) } - d.SetId(aws.StringValue(output.FirewallConfig.Id)) + d.SetId(aws.ToString(output.FirewallConfig.Id)) return append(diags, resourceFirewallConfigRead(ctx, d, meta)...) } func resourceFirewallConfigRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).Route53ResolverConn(ctx) + conn := meta.(*conns.AWSClient).Route53ResolverClient(ctx) - firewallConfig, err := FindFirewallConfigByID(ctx, conn, d.Id()) + firewallConfig, err := findFirewallConfigByID(ctx, conn, d.Id()) if !d.IsNewResource() && tfresource.NotFound(err) { log.Printf("[WARN] Route53 Resolver Firewall Config (%s) not found, removing from state", d.Id()) @@ -99,17 +99,17 @@ func resourceFirewallConfigRead(ctx context.Context, d *schema.ResourceData, met func resourceFirewallConfigUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).Route53ResolverConn(ctx) + conn := meta.(*conns.AWSClient).Route53ResolverClient(ctx) input := &route53resolver.UpdateFirewallConfigInput{ ResourceId: aws.String(d.Get(names.AttrResourceID).(string)), } if v, ok := d.GetOk("firewall_fail_open"); ok { - input.FirewallFailOpen = aws.String(v.(string)) + input.FirewallFailOpen = awstypes.FirewallFailOpenStatus(v.(string)) } - _, err := conn.UpdateFirewallConfigWithContext(ctx, input) + _, err := conn.UpdateFirewallConfig(ctx, input) if err != nil { return sdkdiag.AppendErrorf(diags, "updating Route53 Resolver Firewall Config: %s", err) @@ -120,12 +120,12 @@ func resourceFirewallConfigUpdate(ctx context.Context, d *schema.ResourceData, m func resourceFirewallConfigDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).Route53ResolverConn(ctx) + conn := meta.(*conns.AWSClient).Route53ResolverClient(ctx) log.Printf("[DEBUG] Deleting Route53 Resolver Firewall Config: %s", d.Id()) - _, err := conn.UpdateFirewallConfigWithContext(ctx, &route53resolver.UpdateFirewallConfigInput{ + _, err := conn.UpdateFirewallConfig(ctx, &route53resolver.UpdateFirewallConfigInput{ ResourceId: aws.String(d.Get(names.AttrResourceID).(string)), - FirewallFailOpen: aws.String(route53resolver.FirewallFailOpenStatusDisabled), + FirewallFailOpen: awstypes.FirewallFailOpenStatusDisabled, }) if err != nil { @@ -135,33 +135,29 @@ func resourceFirewallConfigDelete(ctx context.Context, d *schema.ResourceData, m return diags } -func FindFirewallConfigByID(ctx context.Context, conn *route53resolver.Route53Resolver, id string) (*route53resolver.FirewallConfig, error) { +func findFirewallConfigByID(ctx context.Context, conn *route53resolver.Client, id string) (*awstypes.FirewallConfig, error) { input := &route53resolver.ListFirewallConfigsInput{} - var output *route53resolver.FirewallConfig + var output *awstypes.FirewallConfig // GetFirewallConfig does not support query by ID. - err := conn.ListFirewallConfigsPagesWithContext(ctx, input, func(page *route53resolver.ListFirewallConfigsOutput, lastPage bool) bool { - if page == nil { - return !lastPage + pages := route53resolver.NewListFirewallConfigsPaginator(conn, input) + for pages.HasMorePages() { + page, err := pages.NextPage(ctx) + + if err != nil { + return nil, err } for _, v := range page.FirewallConfigs { - if aws.StringValue(v.Id) == id { - output = v - - return false + if aws.ToString(v.Id) == id { + output = &v + break } } - - return !lastPage - }) - - if err != nil { - return nil, err } if output == nil { - return nil, &retry.NotFoundError{LastRequest: input} + return nil, tfresource.NewEmptyResultError(input) } return output, nil diff --git a/internal/service/route53resolver/firewall_config_test.go b/internal/service/route53resolver/firewall_config_test.go index 5d2ae431424f..18237c405d7b 100644 --- a/internal/service/route53resolver/firewall_config_test.go +++ b/internal/service/route53resolver/firewall_config_test.go @@ -8,8 +8,7 @@ import ( "fmt" "testing" - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/service/route53resolver" + awstypes "github.com/aws/aws-sdk-go-v2/service/route53resolver/types" sdkacctest "github.com/hashicorp/terraform-plugin-testing/helper/acctest" "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/hashicorp/terraform-plugin-testing/terraform" @@ -22,7 +21,7 @@ import ( func TestAccRoute53ResolverFirewallConfig_basic(t *testing.T) { ctx := acctest.Context(t) - var v route53resolver.FirewallConfig + var v awstypes.FirewallConfig resourceName := "aws_route53_resolver_firewall_config.test" rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) @@ -51,7 +50,7 @@ func TestAccRoute53ResolverFirewallConfig_basic(t *testing.T) { func TestAccRoute53ResolverFirewallConfig_disappears(t *testing.T) { ctx := acctest.Context(t) - var v route53resolver.FirewallConfig + var v awstypes.FirewallConfig resourceName := "aws_route53_resolver_firewall_config.test" rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) @@ -75,7 +74,7 @@ func TestAccRoute53ResolverFirewallConfig_disappears(t *testing.T) { func testAccCheckFirewallConfigDestroy(ctx context.Context) resource.TestCheckFunc { return func(s *terraform.State) error { - conn := acctest.Provider.Meta().(*conns.AWSClient).Route53ResolverConn(ctx) + conn := acctest.Provider.Meta().(*conns.AWSClient).Route53ResolverClient(ctx) for _, rs := range s.RootModule().Resources { if rs.Type != "aws_route53_resolver_firewall_config" { @@ -92,7 +91,7 @@ func testAccCheckFirewallConfigDestroy(ctx context.Context) resource.TestCheckFu return err } - if aws.StringValue(config.FirewallFailOpen) == route53resolver.FirewallFailOpenStatusDisabled { + if config.FirewallFailOpen == awstypes.FirewallFailOpenStatusDisabled { return nil } @@ -103,7 +102,7 @@ func testAccCheckFirewallConfigDestroy(ctx context.Context) resource.TestCheckFu } } -func testAccCheckFirewallConfigExists(ctx context.Context, n string, v *route53resolver.FirewallConfig) resource.TestCheckFunc { +func testAccCheckFirewallConfigExists(ctx context.Context, n string, v *awstypes.FirewallConfig) resource.TestCheckFunc { return func(s *terraform.State) error { rs, ok := s.RootModule().Resources[n] if !ok { @@ -114,7 +113,7 @@ func testAccCheckFirewallConfigExists(ctx context.Context, n string, v *route53r return fmt.Errorf("No Route53 Resolver Firewall Config ID is set") } - conn := acctest.Provider.Meta().(*conns.AWSClient).Route53ResolverConn(ctx) + conn := acctest.Provider.Meta().(*conns.AWSClient).Route53ResolverClient(ctx) output, err := tfroute53resolver.FindFirewallConfigByID(ctx, conn, rs.Primary.ID) From 93ecc65d34ffbd21ab3739d24cb1febadf533670 Mon Sep 17 00:00:00 2001 From: Daniel Rieske Date: Sat, 10 Aug 2024 00:19:43 +0200 Subject: [PATCH 06/32] feat: migrated d/firewall_config to sdkv2 --- .../firewall_config_data_source.go | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/internal/service/route53resolver/firewall_config_data_source.go b/internal/service/route53resolver/firewall_config_data_source.go index 254049665fba..684e875d1b27 100644 --- a/internal/service/route53resolver/firewall_config_data_source.go +++ b/internal/service/route53resolver/firewall_config_data_source.go @@ -6,20 +6,21 @@ package route53resolver import ( "context" - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/service/route53resolver" - "github.com/hashicorp/aws-sdk-go-base/v2/awsv1shim/v2/tfawserr" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/route53resolver" + awstypes "github.com/aws/aws-sdk-go-v2/service/route53resolver/types" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-provider-aws/internal/conns" + "github.com/hashicorp/terraform-provider-aws/internal/errs" "github.com/hashicorp/terraform-provider-aws/internal/errs/sdkdiag" "github.com/hashicorp/terraform-provider-aws/internal/tfresource" "github.com/hashicorp/terraform-provider-aws/names" ) -// @SDKDataSource("aws_route53_resolver_firewall_config") -func DataSourceFirewallConfig() *schema.Resource { +// @SDKDataSource("aws_route53_resolver_firewall_config", name="Firewall Config") +func dataSourceFirewallConfig() *schema.Resource { return &schema.Resource{ ReadWithoutTimeout: dataSourceFirewallConfigRead, @@ -42,7 +43,7 @@ func DataSourceFirewallConfig() *schema.Resource { func dataSourceFirewallConfigRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).Route53ResolverConn(ctx) + conn := meta.(*conns.AWSClient).Route53ResolverClient(ctx) id := d.Get(names.AttrResourceID).(string) firewallConfig, err := findFirewallConfigByResourceID(ctx, conn, id) @@ -51,7 +52,7 @@ func dataSourceFirewallConfigRead(ctx context.Context, d *schema.ResourceData, m return sdkdiag.AppendErrorf(diags, "reading Route53 Resolver Firewall Config (%s): %s", id, err) } - d.SetId(aws.StringValue(firewallConfig.Id)) + d.SetId(aws.ToString(firewallConfig.Id)) d.Set("firewall_fail_open", firewallConfig.FirewallFailOpen) d.Set(names.AttrOwnerID, firewallConfig.OwnerId) d.Set(names.AttrResourceID, firewallConfig.ResourceId) @@ -59,14 +60,14 @@ func dataSourceFirewallConfigRead(ctx context.Context, d *schema.ResourceData, m return diags } -func findFirewallConfigByResourceID(ctx context.Context, conn *route53resolver.Route53Resolver, id string) (*route53resolver.FirewallConfig, error) { +func findFirewallConfigByResourceID(ctx context.Context, conn *route53resolver.Client, id string) (*awstypes.FirewallConfig, error) { input := &route53resolver.GetFirewallConfigInput{ ResourceId: aws.String(id), } - output, err := conn.GetFirewallConfigWithContext(ctx, input) + output, err := conn.GetFirewallConfig(ctx, input) - if tfawserr.ErrCodeEquals(err, route53resolver.ErrCodeResourceNotFoundException) { + if errs.IsA[*awstypes.ResourceNotFoundException](err) { return nil, &retry.NotFoundError{ LastError: err, LastRequest: input, From 718870614868db7c942aecfdf1645e9feab78126 Mon Sep 17 00:00:00 2001 From: Daniel Rieske Date: Sat, 10 Aug 2024 00:20:06 +0200 Subject: [PATCH 07/32] feat: migrated r/firewall_domain_list to sdkv2 --- .../route53resolver/firewall_domain_list.go | 98 +++++++++---------- .../firewall_domain_list_test.go | 16 +-- 2 files changed, 55 insertions(+), 59 deletions(-) diff --git a/internal/service/route53resolver/firewall_domain_list.go b/internal/service/route53resolver/firewall_domain_list.go index 3915e5d3105f..1601ac756102 100644 --- a/internal/service/route53resolver/firewall_domain_list.go +++ b/internal/service/route53resolver/firewall_domain_list.go @@ -9,14 +9,16 @@ import ( "log" "time" - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/service/route53resolver" - "github.com/hashicorp/aws-sdk-go-base/v2/awsv1shim/v2/tfawserr" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/route53resolver" + awstypes "github.com/aws/aws-sdk-go-v2/service/route53resolver/types" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/id" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-provider-aws/internal/conns" + "github.com/hashicorp/terraform-provider-aws/internal/enum" + "github.com/hashicorp/terraform-provider-aws/internal/errs" "github.com/hashicorp/terraform-provider-aws/internal/errs/sdkdiag" "github.com/hashicorp/terraform-provider-aws/internal/flex" tftags "github.com/hashicorp/terraform-provider-aws/internal/tags" @@ -27,7 +29,7 @@ import ( // @SDKResource("aws_route53_resolver_firewall_domain_list", name="Firewall Domain List") // @Tags(identifierAttribute="arn") -func ResourceFirewallDomainList() *schema.Resource { +func resourceFirewallDomainList() *schema.Resource { return &schema.Resource{ CreateWithoutTimeout: resourceFirewallDomainListCreate, ReadWithoutTimeout: resourceFirewallDomainListRead, @@ -64,7 +66,7 @@ func ResourceFirewallDomainList() *schema.Resource { func resourceFirewallDomainListCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).Route53ResolverConn(ctx) + conn := meta.(*conns.AWSClient).Route53ResolverClient(ctx) name := d.Get(names.AttrName).(string) input := &route53resolver.CreateFirewallDomainListInput{ @@ -73,19 +75,19 @@ func resourceFirewallDomainListCreate(ctx context.Context, d *schema.ResourceDat Tags: getTagsIn(ctx), } - output, err := conn.CreateFirewallDomainListWithContext(ctx, input) + output, err := conn.CreateFirewallDomainList(ctx, input) if err != nil { return sdkdiag.AppendErrorf(diags, "creating Route53 Resolver Firewall Domain List (%s): %s", name, err) } - d.SetId(aws.StringValue(output.FirewallDomainList.Id)) + d.SetId(aws.ToString(output.FirewallDomainList.Id)) if v, ok := d.GetOk("domains"); ok && v.(*schema.Set).Len() > 0 { - _, err := conn.UpdateFirewallDomainsWithContext(ctx, &route53resolver.UpdateFirewallDomainsInput{ + _, err := conn.UpdateFirewallDomains(ctx, &route53resolver.UpdateFirewallDomainsInput{ FirewallDomainListId: aws.String(d.Id()), - Domains: flex.ExpandStringSet(v.(*schema.Set)), - Operation: aws.String(route53resolver.FirewallDomainUpdateOperationAdd), + Domains: flex.ExpandStringValueSet(v.(*schema.Set)), + Operation: awstypes.FirewallDomainUpdateOperationAdd, }) if err != nil { @@ -102,9 +104,9 @@ func resourceFirewallDomainListCreate(ctx context.Context, d *schema.ResourceDat func resourceFirewallDomainListRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).Route53ResolverConn(ctx) + conn := meta.(*conns.AWSClient).Route53ResolverClient(ctx) - firewallDomainList, err := FindFirewallDomainListByID(ctx, conn, d.Id()) + firewallDomainList, err := findFirewallDomainListByID(ctx, conn, d.Id()) if !d.IsNewResource() && tfresource.NotFound(err) { log.Printf("[WARN] Route53 Resolver Firewall Domain List (%s) not found, removing from state", d.Id()) @@ -116,37 +118,33 @@ func resourceFirewallDomainListRead(ctx context.Context, d *schema.ResourceData, return sdkdiag.AppendErrorf(diags, "reading Route53 Resolver Firewall Domain List (%s): %s", d.Id(), err) } - arn := aws.StringValue(firewallDomainList.Arn) - d.Set(names.AttrARN, arn) + d.Set(names.AttrARN, aws.ToString(firewallDomainList.Arn)) d.Set(names.AttrName, firewallDomainList.Name) input := &route53resolver.ListFirewallDomainsInput{ FirewallDomainListId: aws.String(d.Id()), } - var output []*string + var output []string - err = conn.ListFirewallDomainsPagesWithContext(ctx, input, func(page *route53resolver.ListFirewallDomainsOutput, lastPage bool) bool { - if page == nil { - return !lastPage + pages := route53resolver.NewListFirewallDomainsPaginator(conn, input) + for pages.HasMorePages() { + page, err := pages.NextPage(ctx) + + if err != nil { + return sdkdiag.AppendErrorf(diags, "listing Route53 Resolver Firewall Domain List (%s) domains: %s", d.Id(), err) } output = append(output, page.Domains...) - - return !lastPage - }) - - if err != nil { - return sdkdiag.AppendErrorf(diags, "listing Route53 Resolver Firewall Domain List (%s) domains: %s", d.Id(), err) } - d.Set("domains", aws.StringValueSlice(output)) + d.Set("domains", output) return diags } func resourceFirewallDomainListUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).Route53ResolverConn(ctx) + conn := meta.(*conns.AWSClient).Route53ResolverClient(ctx) if d.HasChange("domains") { o, n := d.GetChange("domains") @@ -160,17 +158,17 @@ func resourceFirewallDomainListUpdate(ctx context.Context, d *schema.ResourceDat ns := n.(*schema.Set) domains := ns - operation := route53resolver.FirewallDomainUpdateOperationReplace + operation := awstypes.FirewallDomainUpdateOperationReplace if domains.Len() == 0 { domains = os - operation = route53resolver.FirewallDomainUpdateOperationRemove + operation = awstypes.FirewallDomainUpdateOperationRemove } - _, err := conn.UpdateFirewallDomainsWithContext(ctx, &route53resolver.UpdateFirewallDomainsInput{ + _, err := conn.UpdateFirewallDomains(ctx, &route53resolver.UpdateFirewallDomainsInput{ FirewallDomainListId: aws.String(d.Id()), - Domains: flex.ExpandStringSet(domains), - Operation: aws.String(operation), + Domains: flex.ExpandStringValueSet(domains), + Operation: operation, }) if err != nil { @@ -187,14 +185,14 @@ func resourceFirewallDomainListUpdate(ctx context.Context, d *schema.ResourceDat func resourceFirewallDomainListDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).Route53ResolverConn(ctx) + conn := meta.(*conns.AWSClient).Route53ResolverClient(ctx) log.Printf("[DEBUG] Deleting Route53 Resolver Firewall Domain List: %s", d.Id()) - _, err := conn.DeleteFirewallDomainListWithContext(ctx, &route53resolver.DeleteFirewallDomainListInput{ + _, err := conn.DeleteFirewallDomainList(ctx, &route53resolver.DeleteFirewallDomainListInput{ FirewallDomainListId: aws.String(d.Id()), }) - if tfawserr.ErrCodeEquals(err, route53resolver.ErrCodeResourceNotFoundException) { + if errs.IsA[*awstypes.ResourceNotFoundException](err) { return diags } @@ -209,14 +207,14 @@ func resourceFirewallDomainListDelete(ctx context.Context, d *schema.ResourceDat return diags } -func FindFirewallDomainListByID(ctx context.Context, conn *route53resolver.Route53Resolver, id string) (*route53resolver.FirewallDomainList, error) { +func findFirewallDomainListByID(ctx context.Context, conn *route53resolver.Client, id string) (*awstypes.FirewallDomainList, error) { input := &route53resolver.GetFirewallDomainListInput{ FirewallDomainListId: aws.String(id), } - output, err := conn.GetFirewallDomainListWithContext(ctx, input) + output, err := conn.GetFirewallDomainList(ctx, input) - if tfawserr.ErrCodeEquals(err, route53resolver.ErrCodeResourceNotFoundException) { + if errs.IsA[*awstypes.ResourceNotFoundException](err) { return nil, &retry.NotFoundError{ LastError: err, LastRequest: input, @@ -234,9 +232,9 @@ func FindFirewallDomainListByID(ctx context.Context, conn *route53resolver.Route return output.FirewallDomainList, nil } -func statusFirewallDomainList(ctx context.Context, conn *route53resolver.Route53Resolver, id string) retry.StateRefreshFunc { +func statusFirewallDomainList(ctx context.Context, conn *route53resolver.Client, id string) retry.StateRefreshFunc { return func() (interface{}, string, error) { - output, err := FindFirewallDomainListByID(ctx, conn, id) + output, err := findFirewallDomainListByID(ctx, conn, id) if tfresource.NotFound(err) { return nil, "", nil @@ -246,7 +244,7 @@ func statusFirewallDomainList(ctx context.Context, conn *route53resolver.Route53 return nil, "", err } - return output, aws.StringValue(output.Status), nil + return output, string(output.Status), nil } } @@ -255,21 +253,19 @@ const ( firewallDomainListDeletedTimeout = 5 * time.Minute ) -func waitFirewallDomainListUpdated(ctx context.Context, conn *route53resolver.Route53Resolver, id string) (*route53resolver.FirewallDomainList, error) { //nolint:unparam +func waitFirewallDomainListUpdated(ctx context.Context, conn *route53resolver.Client, id string) (*awstypes.FirewallDomainList, error) { //nolint:unparam stateConf := &retry.StateChangeConf{ - Pending: []string{route53resolver.FirewallDomainListStatusUpdating, route53resolver.FirewallDomainListStatusImporting}, - Target: []string{route53resolver.FirewallDomainListStatusComplete, - route53resolver.FirewallDomainListStatusCompleteImportFailed, - }, + Pending: enum.Slice(awstypes.FirewallDomainListStatusUpdating, awstypes.FirewallDomainListStatusImporting), + Target: enum.Slice(awstypes.FirewallDomainListStatusComplete, awstypes.FirewallDomainListStatusCompleteImportFailed), Refresh: statusFirewallDomainList(ctx, conn, id), Timeout: firewallDomainListUpdatedTimeout, } outputRaw, err := stateConf.WaitForStateContext(ctx) - if output, ok := outputRaw.(*route53resolver.FirewallDomainList); ok { - if status := aws.StringValue(output.Status); status == route53resolver.FirewallDomainListStatusCompleteImportFailed { - tfresource.SetLastError(err, errors.New(aws.StringValue(output.StatusMessage))) + if output, ok := outputRaw.(*awstypes.FirewallDomainList); ok { + if status := output.Status; status == awstypes.FirewallDomainListStatusCompleteImportFailed { + tfresource.SetLastError(err, errors.New(aws.ToString(output.StatusMessage))) } return output, err @@ -278,9 +274,9 @@ func waitFirewallDomainListUpdated(ctx context.Context, conn *route53resolver.Ro return nil, err } -func waitFirewallDomainListDeleted(ctx context.Context, conn *route53resolver.Route53Resolver, id string) (*route53resolver.FirewallDomainList, error) { +func waitFirewallDomainListDeleted(ctx context.Context, conn *route53resolver.Client, id string) (*awstypes.FirewallDomainList, error) { stateConf := &retry.StateChangeConf{ - Pending: []string{route53resolver.FirewallDomainListStatusDeleting}, + Pending: enum.Slice(awstypes.FirewallDomainListStatusDeleting), Target: []string{}, Refresh: statusFirewallDomainList(ctx, conn, id), Timeout: firewallDomainListDeletedTimeout, @@ -288,7 +284,7 @@ func waitFirewallDomainListDeleted(ctx context.Context, conn *route53resolver.Ro outputRaw, err := stateConf.WaitForStateContext(ctx) - if output, ok := outputRaw.(*route53resolver.FirewallDomainList); ok { + if output, ok := outputRaw.(*awstypes.FirewallDomainList); ok { return output, err } diff --git a/internal/service/route53resolver/firewall_domain_list_test.go b/internal/service/route53resolver/firewall_domain_list_test.go index b5ca463e98fc..72a6fd5917ec 100644 --- a/internal/service/route53resolver/firewall_domain_list_test.go +++ b/internal/service/route53resolver/firewall_domain_list_test.go @@ -8,7 +8,7 @@ import ( "fmt" "testing" - "github.com/aws/aws-sdk-go/service/route53resolver" + awstypes "github.com/aws/aws-sdk-go-v2/service/route53resolver/types" sdkacctest "github.com/hashicorp/terraform-plugin-testing/helper/acctest" "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/hashicorp/terraform-plugin-testing/terraform" @@ -21,7 +21,7 @@ import ( func TestAccRoute53ResolverFirewallDomainList_basic(t *testing.T) { ctx := acctest.Context(t) - var v route53resolver.FirewallDomainList + var v awstypes.FirewallDomainList rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_route53_resolver_firewall_domain_list.test" @@ -52,7 +52,7 @@ func TestAccRoute53ResolverFirewallDomainList_basic(t *testing.T) { func TestAccRoute53ResolverFirewallDomainList_domains(t *testing.T) { ctx := acctest.Context(t) - var v route53resolver.FirewallDomainList + var v awstypes.FirewallDomainList rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_route53_resolver_firewall_domain_list.test" domainName1 := acctest.RandomFQDomainName() @@ -101,7 +101,7 @@ func TestAccRoute53ResolverFirewallDomainList_domains(t *testing.T) { func TestAccRoute53ResolverFirewallDomainList_disappears(t *testing.T) { ctx := acctest.Context(t) - var v route53resolver.FirewallDomainList + var v awstypes.FirewallDomainList rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_route53_resolver_firewall_domain_list.test" @@ -125,7 +125,7 @@ func TestAccRoute53ResolverFirewallDomainList_disappears(t *testing.T) { func TestAccRoute53ResolverFirewallDomainList_tags(t *testing.T) { ctx := acctest.Context(t) - var v route53resolver.FirewallDomainList + var v awstypes.FirewallDomainList rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_route53_resolver_firewall_domain_list.test" @@ -174,7 +174,7 @@ func TestAccRoute53ResolverFirewallDomainList_tags(t *testing.T) { func testAccCheckFirewallDomainListDestroy(ctx context.Context) resource.TestCheckFunc { return func(s *terraform.State) error { - conn := acctest.Provider.Meta().(*conns.AWSClient).Route53ResolverConn(ctx) + conn := acctest.Provider.Meta().(*conns.AWSClient).Route53ResolverClient(ctx) for _, rs := range s.RootModule().Resources { if rs.Type != "aws_route53_resolver_firewall_domain_list" { @@ -198,7 +198,7 @@ func testAccCheckFirewallDomainListDestroy(ctx context.Context) resource.TestChe } } -func testAccCheckFirewallDomainListExists(ctx context.Context, n string, v *route53resolver.FirewallDomainList) resource.TestCheckFunc { +func testAccCheckFirewallDomainListExists(ctx context.Context, n string, v *awstypes.FirewallDomainList) resource.TestCheckFunc { return func(s *terraform.State) error { rs, ok := s.RootModule().Resources[n] if !ok { @@ -209,7 +209,7 @@ func testAccCheckFirewallDomainListExists(ctx context.Context, n string, v *rout return fmt.Errorf("No Route53 Resolver Firewall Domain List ID is set") } - conn := acctest.Provider.Meta().(*conns.AWSClient).Route53ResolverConn(ctx) + conn := acctest.Provider.Meta().(*conns.AWSClient).Route53ResolverClient(ctx) output, err := tfroute53resolver.FindFirewallDomainListByID(ctx, conn, rs.Primary.ID) From 8599765fe56ce0b33703c39a2c9e484799fcfcfb Mon Sep 17 00:00:00 2001 From: Daniel Rieske Date: Sat, 10 Aug 2024 00:20:26 +0200 Subject: [PATCH 08/32] feat: migrated r/firewall_rule_group_association to sdkv2 --- .../firewall_rule_group_association.go | 92 +++++++++---------- .../firewall_rule_group_association_test.go | 30 +++--- 2 files changed, 61 insertions(+), 61 deletions(-) diff --git a/internal/service/route53resolver/firewall_rule_group_association.go b/internal/service/route53resolver/firewall_rule_group_association.go index 959fa337c406..0d3c61c24b13 100644 --- a/internal/service/route53resolver/firewall_rule_group_association.go +++ b/internal/service/route53resolver/firewall_rule_group_association.go @@ -9,15 +9,16 @@ import ( "log" "time" - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/service/route53resolver" - "github.com/hashicorp/aws-sdk-go-base/v2/awsv1shim/v2/tfawserr" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/route53resolver" + awstypes "github.com/aws/aws-sdk-go-v2/service/route53resolver/types" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/id" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/hashicorp/terraform-provider-aws/internal/conns" + "github.com/hashicorp/terraform-provider-aws/internal/enum" + "github.com/hashicorp/terraform-provider-aws/internal/errs" "github.com/hashicorp/terraform-provider-aws/internal/errs/sdkdiag" tftags "github.com/hashicorp/terraform-provider-aws/internal/tags" "github.com/hashicorp/terraform-provider-aws/internal/tfresource" @@ -25,9 +26,9 @@ import ( "github.com/hashicorp/terraform-provider-aws/names" ) -// @SDKResource("aws_route53_resolver_firewall_rule_group_association", name="Rule Group Association") +// @SDKResource("aws_route53_resolver_firewall_rule_group_association", name="Firewall Rule Group Association") // @Tags(identifierAttribute="arn") -func ResourceFirewallRuleGroupAssociation() *schema.Resource { +func resourceFirewallRuleGroupAssociation() *schema.Resource { return &schema.Resource{ CreateWithoutTimeout: resourceFirewallRuleGroupAssociationCreate, ReadWithoutTimeout: resourceFirewallRuleGroupAssociationRead, @@ -49,10 +50,10 @@ func ResourceFirewallRuleGroupAssociation() *schema.Resource { ForceNew: true, }, "mutation_protection": { - Type: schema.TypeString, - Optional: true, - Computed: true, - ValidateFunc: validation.StringInSlice(route53resolver.MutationProtectionStatus_Values(), false), + Type: schema.TypeString, + Optional: true, + Computed: true, + ValidateDiagFunc: enum.Validate[awstypes.MutationProtectionStatus](), }, names.AttrName: { Type: schema.TypeString, @@ -78,29 +79,29 @@ func ResourceFirewallRuleGroupAssociation() *schema.Resource { func resourceFirewallRuleGroupAssociationCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).Route53ResolverConn(ctx) + conn := meta.(*conns.AWSClient).Route53ResolverClient(ctx) name := d.Get(names.AttrName).(string) input := &route53resolver.AssociateFirewallRuleGroupInput{ CreatorRequestId: aws.String(id.PrefixedUniqueId("tf-r53-rslvr-frgassoc-")), FirewallRuleGroupId: aws.String(d.Get("firewall_rule_group_id").(string)), Name: aws.String(name), - Priority: aws.Int64(int64(d.Get(names.AttrPriority).(int))), + Priority: aws.Int32(int32(d.Get(names.AttrPriority).(int))), Tags: getTagsIn(ctx), VpcId: aws.String(d.Get(names.AttrVPCID).(string)), } if v, ok := d.GetOk("mutation_protection"); ok { - input.MutationProtection = aws.String(v.(string)) + input.MutationProtection = awstypes.MutationProtectionStatus(v.(string)) } - output, err := conn.AssociateFirewallRuleGroupWithContext(ctx, input) + output, err := conn.AssociateFirewallRuleGroup(ctx, input) if err != nil { return sdkdiag.AppendErrorf(diags, "creating Route53 Resolver Firewall Rule Group Association (%s): %s", name, err) } - d.SetId(aws.StringValue(output.FirewallRuleGroupAssociation.Id)) + d.SetId(aws.ToString(output.FirewallRuleGroupAssociation.Id)) if _, err := waitFirewallRuleGroupAssociationCreated(ctx, conn, d.Id()); err != nil { return sdkdiag.AppendErrorf(diags, "waiting for Route53 Resolver Firewall Rule Group Association (%s) create: %s", d.Id(), err) @@ -111,9 +112,9 @@ func resourceFirewallRuleGroupAssociationCreate(ctx context.Context, d *schema.R func resourceFirewallRuleGroupAssociationRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).Route53ResolverConn(ctx) + conn := meta.(*conns.AWSClient).Route53ResolverClient(ctx) - ruleGroupAssociation, err := FindFirewallRuleGroupAssociationByID(ctx, conn, d.Id()) + ruleGroupAssociation, err := findFirewallRuleGroupAssociationByID(ctx, conn, d.Id()) if !d.IsNewResource() && tfresource.NotFound(err) { log.Printf("[WARN] Route53 Resolver Firewall Rule Group Association (%s) not found, removing from state", d.Id()) @@ -125,8 +126,7 @@ func resourceFirewallRuleGroupAssociationRead(ctx context.Context, d *schema.Res return sdkdiag.AppendErrorf(diags, "reading Route53 Resolver Firewall Rule Group Association (%s): %s", d.Id(), err) } - arn := aws.StringValue(ruleGroupAssociation.Arn) - d.Set(names.AttrARN, arn) + d.Set(names.AttrARN, aws.ToString(ruleGroupAssociation.Arn)) d.Set(names.AttrName, ruleGroupAssociation.Name) d.Set("firewall_rule_group_id", ruleGroupAssociation.FirewallRuleGroupId) d.Set("mutation_protection", ruleGroupAssociation.MutationProtection) @@ -138,20 +138,20 @@ func resourceFirewallRuleGroupAssociationRead(ctx context.Context, d *schema.Res func resourceFirewallRuleGroupAssociationUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).Route53ResolverConn(ctx) + conn := meta.(*conns.AWSClient).Route53ResolverClient(ctx) if d.HasChanges(names.AttrName, "mutation_protection", names.AttrPriority) { input := &route53resolver.UpdateFirewallRuleGroupAssociationInput{ FirewallRuleGroupAssociationId: aws.String(d.Id()), Name: aws.String(d.Get(names.AttrName).(string)), - Priority: aws.Int64(int64(d.Get(names.AttrPriority).(int))), + Priority: aws.Int32(int32(d.Get(names.AttrPriority).(int))), } if v, ok := d.GetOk("mutation_protection"); ok { - input.MutationProtection = aws.String(v.(string)) + input.MutationProtection = awstypes.MutationProtectionStatus(v.(string)) } - _, err := conn.UpdateFirewallRuleGroupAssociationWithContext(ctx, input) + _, err := conn.UpdateFirewallRuleGroupAssociation(ctx, input) if err != nil { return sdkdiag.AppendErrorf(diags, "updating Route53 Resolver Firewall Rule Group Association (%s): %s", d.Id(), err) @@ -167,14 +167,14 @@ func resourceFirewallRuleGroupAssociationUpdate(ctx context.Context, d *schema.R func resourceFirewallRuleGroupAssociationDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).Route53ResolverConn(ctx) + conn := meta.(*conns.AWSClient).Route53ResolverClient(ctx) log.Printf("[DEBUG] Deleting Route53 Resolver Firewall Rule Group Association: %s", d.Id()) - _, err := conn.DisassociateFirewallRuleGroupWithContext(ctx, &route53resolver.DisassociateFirewallRuleGroupInput{ + _, err := conn.DisassociateFirewallRuleGroup(ctx, &route53resolver.DisassociateFirewallRuleGroupInput{ FirewallRuleGroupAssociationId: aws.String(d.Id()), }) - if tfawserr.ErrCodeEquals(err, route53resolver.ErrCodeResourceNotFoundException) { + if errs.IsA[*awstypes.ResourceNotFoundException](err) { return diags } @@ -189,14 +189,14 @@ func resourceFirewallRuleGroupAssociationDelete(ctx context.Context, d *schema.R return diags } -func FindFirewallRuleGroupAssociationByID(ctx context.Context, conn *route53resolver.Route53Resolver, id string) (*route53resolver.FirewallRuleGroupAssociation, error) { +func findFirewallRuleGroupAssociationByID(ctx context.Context, conn *route53resolver.Client, id string) (*awstypes.FirewallRuleGroupAssociation, error) { input := &route53resolver.GetFirewallRuleGroupAssociationInput{ FirewallRuleGroupAssociationId: aws.String(id), } - output, err := conn.GetFirewallRuleGroupAssociationWithContext(ctx, input) + output, err := conn.GetFirewallRuleGroupAssociation(ctx, input) - if tfawserr.ErrCodeEquals(err, route53resolver.ErrCodeResourceNotFoundException) { + if errs.IsA[*awstypes.ResourceNotFoundException](err) { return nil, &retry.NotFoundError{ LastError: err, LastRequest: input, @@ -214,9 +214,9 @@ func FindFirewallRuleGroupAssociationByID(ctx context.Context, conn *route53reso return output.FirewallRuleGroupAssociation, nil } -func statusFirewallRuleGroupAssociation(ctx context.Context, conn *route53resolver.Route53Resolver, id string) retry.StateRefreshFunc { +func statusFirewallRuleGroupAssociation(ctx context.Context, conn *route53resolver.Client, id string) retry.StateRefreshFunc { return func() (interface{}, string, error) { - output, err := FindFirewallRuleGroupAssociationByID(ctx, conn, id) + output, err := findFirewallRuleGroupAssociationByID(ctx, conn, id) if tfresource.NotFound(err) { return nil, "", nil @@ -226,7 +226,7 @@ func statusFirewallRuleGroupAssociation(ctx context.Context, conn *route53resolv return nil, "", err } - return output, aws.StringValue(output.Status), nil + return output, string(output.Status), nil } } @@ -236,18 +236,18 @@ const ( firewallRuleGroupAssociationDeletedTimeout = 5 * time.Minute ) -func waitFirewallRuleGroupAssociationCreated(ctx context.Context, conn *route53resolver.Route53Resolver, id string) (*route53resolver.FirewallRuleGroupAssociation, error) { +func waitFirewallRuleGroupAssociationCreated(ctx context.Context, conn *route53resolver.Client, id string) (*awstypes.FirewallRuleGroupAssociation, error) { stateConf := &retry.StateChangeConf{ - Pending: []string{route53resolver.FirewallRuleGroupAssociationStatusUpdating}, - Target: []string{route53resolver.FirewallRuleGroupAssociationStatusComplete}, + Pending: enum.Slice(awstypes.FirewallRuleGroupAssociationStatusUpdating), + Target: enum.Slice(awstypes.FirewallRuleGroupAssociationStatusComplete), Refresh: statusFirewallRuleGroupAssociation(ctx, conn, id), Timeout: firewallRuleGroupAssociationCreatedTimeout, } outputRaw, err := stateConf.WaitForStateContext(ctx) - if output, ok := outputRaw.(*route53resolver.FirewallRuleGroupAssociation); ok { - tfresource.SetLastError(err, errors.New(aws.StringValue(output.StatusMessage))) + if output, ok := outputRaw.(*awstypes.FirewallRuleGroupAssociation); ok { + tfresource.SetLastError(err, errors.New(aws.ToString(output.StatusMessage))) return output, err } @@ -255,18 +255,18 @@ func waitFirewallRuleGroupAssociationCreated(ctx context.Context, conn *route53r return nil, err } -func waitFirewallRuleGroupAssociationUpdated(ctx context.Context, conn *route53resolver.Route53Resolver, id string) (*route53resolver.FirewallRuleGroupAssociation, error) { +func waitFirewallRuleGroupAssociationUpdated(ctx context.Context, conn *route53resolver.Client, id string) (*awstypes.FirewallRuleGroupAssociation, error) { stateConf := &retry.StateChangeConf{ - Pending: []string{route53resolver.FirewallRuleGroupAssociationStatusUpdating}, - Target: []string{route53resolver.FirewallRuleGroupAssociationStatusComplete}, + Pending: enum.Slice(awstypes.FirewallRuleGroupAssociationStatusUpdating), + Target: enum.Slice(awstypes.FirewallRuleGroupAssociationStatusComplete), Refresh: statusFirewallRuleGroupAssociation(ctx, conn, id), Timeout: firewallRuleGroupAssociationUpdatedTimeout, } outputRaw, err := stateConf.WaitForStateContext(ctx) - if output, ok := outputRaw.(*route53resolver.FirewallRuleGroupAssociation); ok { - tfresource.SetLastError(err, errors.New(aws.StringValue(output.StatusMessage))) + if output, ok := outputRaw.(*awstypes.FirewallRuleGroupAssociation); ok { + tfresource.SetLastError(err, errors.New(aws.ToString(output.StatusMessage))) return output, err } @@ -274,9 +274,9 @@ func waitFirewallRuleGroupAssociationUpdated(ctx context.Context, conn *route53r return nil, err } -func waitFirewallRuleGroupAssociationDeleted(ctx context.Context, conn *route53resolver.Route53Resolver, id string) (*route53resolver.FirewallRuleGroupAssociation, error) { +func waitFirewallRuleGroupAssociationDeleted(ctx context.Context, conn *route53resolver.Client, id string) (*awstypes.FirewallRuleGroupAssociation, error) { stateConf := &retry.StateChangeConf{ - Pending: []string{route53resolver.FirewallRuleGroupAssociationStatusDeleting}, + Pending: enum.Slice(awstypes.FirewallRuleGroupAssociationStatusDeleting), Target: []string{}, Refresh: statusFirewallRuleGroupAssociation(ctx, conn, id), Timeout: firewallRuleGroupAssociationDeletedTimeout, @@ -284,8 +284,8 @@ func waitFirewallRuleGroupAssociationDeleted(ctx context.Context, conn *route53r outputRaw, err := stateConf.WaitForStateContext(ctx) - if output, ok := outputRaw.(*route53resolver.FirewallRuleGroupAssociation); ok { - tfresource.SetLastError(err, errors.New(aws.StringValue(output.StatusMessage))) + if output, ok := outputRaw.(*awstypes.FirewallRuleGroupAssociation); ok { + tfresource.SetLastError(err, errors.New(aws.ToString(output.StatusMessage))) return output, err } diff --git a/internal/service/route53resolver/firewall_rule_group_association_test.go b/internal/service/route53resolver/firewall_rule_group_association_test.go index 8f6fb0e9ae24..f59e50127817 100644 --- a/internal/service/route53resolver/firewall_rule_group_association_test.go +++ b/internal/service/route53resolver/firewall_rule_group_association_test.go @@ -8,7 +8,7 @@ import ( "fmt" "testing" - "github.com/aws/aws-sdk-go/service/route53resolver" + awstypes "github.com/aws/aws-sdk-go-v2/service/route53resolver/types" sdkacctest "github.com/hashicorp/terraform-plugin-testing/helper/acctest" "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/hashicorp/terraform-plugin-testing/terraform" @@ -21,7 +21,7 @@ import ( func TestAccRoute53ResolverFirewallRuleGroupAssociation_basic(t *testing.T) { ctx := acctest.Context(t) - var v route53resolver.FirewallRuleGroupAssociation + var v awstypes.FirewallRuleGroupAssociation rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_route53_resolver_firewall_rule_group_association.test" @@ -37,7 +37,7 @@ func TestAccRoute53ResolverFirewallRuleGroupAssociation_basic(t *testing.T) { testAccCheckFirewallRuleGroupAssociationExists(ctx, resourceName, &v), resource.TestCheckResourceAttr(resourceName, names.AttrName, rName), resource.TestCheckResourceAttrPair(resourceName, "firewall_rule_group_id", "aws_route53_resolver_firewall_rule_group.test", names.AttrID), - resource.TestCheckResourceAttr(resourceName, "mutation_protection", "DISABLED"), + resource.TestCheckResourceAttr(resourceName, "mutation_protection", string(awstypes.MutationProtectionStatusDisabled)), resource.TestCheckResourceAttr(resourceName, names.AttrPriority, "101"), resource.TestCheckResourceAttrPair(resourceName, names.AttrVPCID, "aws_vpc.test", names.AttrID), resource.TestCheckResourceAttr(resourceName, acctest.CtTagsPercent, acctest.Ct0), @@ -54,7 +54,7 @@ func TestAccRoute53ResolverFirewallRuleGroupAssociation_basic(t *testing.T) { func TestAccRoute53ResolverFirewallRuleGroupAssociation_name(t *testing.T) { ctx := acctest.Context(t) - var v route53resolver.FirewallRuleGroupAssociation + var v awstypes.FirewallRuleGroupAssociation rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) rNewName := sdkacctest.RandomWithPrefix("tf-acc-test2") resourceName := "aws_route53_resolver_firewall_rule_group_association.test" @@ -90,7 +90,7 @@ func TestAccRoute53ResolverFirewallRuleGroupAssociation_name(t *testing.T) { func TestAccRoute53ResolverFirewallRuleGroupAssociation_mutationProtection(t *testing.T) { ctx := acctest.Context(t) - var v route53resolver.FirewallRuleGroupAssociation + var v awstypes.FirewallRuleGroupAssociation rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_route53_resolver_firewall_rule_group_association.test" @@ -101,10 +101,10 @@ func TestAccRoute53ResolverFirewallRuleGroupAssociation_mutationProtection(t *te CheckDestroy: testAccCheckFirewallRuleGroupAssociationDestroy(ctx), Steps: []resource.TestStep{ { - Config: testAccFirewallRuleGroupAssociationConfig_mutationProtection(rName, "ENABLED"), + Config: testAccFirewallRuleGroupAssociationConfig_mutationProtection(rName, string(awstypes.MutationProtectionStatusEnabled)), Check: resource.ComposeTestCheckFunc( testAccCheckFirewallRuleGroupAssociationExists(ctx, resourceName, &v), - resource.TestCheckResourceAttr(resourceName, "mutation_protection", "ENABLED"), + resource.TestCheckResourceAttr(resourceName, "mutation_protection", string(awstypes.MutationProtectionStatusEnabled)), ), }, { @@ -113,10 +113,10 @@ func TestAccRoute53ResolverFirewallRuleGroupAssociation_mutationProtection(t *te ImportStateVerify: true, }, { - Config: testAccFirewallRuleGroupAssociationConfig_mutationProtection(rName, "DISABLED"), + Config: testAccFirewallRuleGroupAssociationConfig_mutationProtection(rName, string(awstypes.MutationProtectionStatusDisabled)), Check: resource.ComposeTestCheckFunc( testAccCheckFirewallRuleGroupAssociationExists(ctx, resourceName, &v), - resource.TestCheckResourceAttr(resourceName, "mutation_protection", "DISABLED"), + resource.TestCheckResourceAttr(resourceName, "mutation_protection", string(awstypes.MutationProtectionStatusDisabled)), ), }, }, @@ -125,7 +125,7 @@ func TestAccRoute53ResolverFirewallRuleGroupAssociation_mutationProtection(t *te func TestAccRoute53ResolverFirewallRuleGroupAssociation_priority(t *testing.T) { ctx := acctest.Context(t) - var v route53resolver.FirewallRuleGroupAssociation + var v awstypes.FirewallRuleGroupAssociation rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_route53_resolver_firewall_rule_group_association.test" @@ -160,7 +160,7 @@ func TestAccRoute53ResolverFirewallRuleGroupAssociation_priority(t *testing.T) { func TestAccRoute53ResolverFirewallRuleGroupAssociation_disappears(t *testing.T) { ctx := acctest.Context(t) - var v route53resolver.FirewallRuleGroupAssociation + var v awstypes.FirewallRuleGroupAssociation rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_route53_resolver_firewall_rule_group_association.test" @@ -184,7 +184,7 @@ func TestAccRoute53ResolverFirewallRuleGroupAssociation_disappears(t *testing.T) func TestAccRoute53ResolverFirewallRuleGroupAssociation_tags(t *testing.T) { ctx := acctest.Context(t) - var v route53resolver.FirewallRuleGroupAssociation + var v awstypes.FirewallRuleGroupAssociation rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_route53_resolver_firewall_rule_group_association.test" @@ -230,7 +230,7 @@ func TestAccRoute53ResolverFirewallRuleGroupAssociation_tags(t *testing.T) { func testAccCheckFirewallRuleGroupAssociationDestroy(ctx context.Context) resource.TestCheckFunc { return func(s *terraform.State) error { - conn := acctest.Provider.Meta().(*conns.AWSClient).Route53ResolverConn(ctx) + conn := acctest.Provider.Meta().(*conns.AWSClient).Route53ResolverClient(ctx) for _, rs := range s.RootModule().Resources { if rs.Type != "aws_route53_resolver_firewall_rule_group_association" { @@ -254,7 +254,7 @@ func testAccCheckFirewallRuleGroupAssociationDestroy(ctx context.Context) resour } } -func testAccCheckFirewallRuleGroupAssociationExists(ctx context.Context, n string, v *route53resolver.FirewallRuleGroupAssociation) resource.TestCheckFunc { +func testAccCheckFirewallRuleGroupAssociationExists(ctx context.Context, n string, v *awstypes.FirewallRuleGroupAssociation) resource.TestCheckFunc { return func(s *terraform.State) error { rs, ok := s.RootModule().Resources[n] if !ok { @@ -265,7 +265,7 @@ func testAccCheckFirewallRuleGroupAssociationExists(ctx context.Context, n strin return fmt.Errorf("No Route53 Resolver Firewall Rule Group Association ID is set") } - conn := acctest.Provider.Meta().(*conns.AWSClient).Route53ResolverConn(ctx) + conn := acctest.Provider.Meta().(*conns.AWSClient).Route53ResolverClient(ctx) output, err := tfroute53resolver.FindFirewallRuleGroupAssociationByID(ctx, conn, rs.Primary.ID) From 180693f58a242d0d64a92a2ebc1599994e463558 Mon Sep 17 00:00:00 2001 From: Daniel Rieske Date: Sat, 10 Aug 2024 00:20:37 +0200 Subject: [PATCH 09/32] feat: migrated d/firewall_rule_group_association to sdkv2 --- .../firewall_rule_group_association_data_source.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/internal/service/route53resolver/firewall_rule_group_association_data_source.go b/internal/service/route53resolver/firewall_rule_group_association_data_source.go index 0da7ec15e36c..d420683ff0e7 100644 --- a/internal/service/route53resolver/firewall_rule_group_association_data_source.go +++ b/internal/service/route53resolver/firewall_rule_group_association_data_source.go @@ -6,7 +6,7 @@ package route53resolver import ( "context" - "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go-v2/aws" "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" @@ -14,8 +14,8 @@ import ( "github.com/hashicorp/terraform-provider-aws/names" ) -// @SDKDataSource("aws_route53_resolver_firewall_rule_group_association") -func DataSourceFirewallRuleGroupAssociation() *schema.Resource { +// @SDKDataSource("aws_route53_resolver_firewall_rule_group_association", name="Firewall Rule Group Association") +func dataSourceFirewallRuleGroupAssociation() *schema.Resource { return &schema.Resource{ ReadWithoutTimeout: dataSourceRuleGroupAssociationRead, @@ -78,16 +78,16 @@ func DataSourceFirewallRuleGroupAssociation() *schema.Resource { func dataSourceRuleGroupAssociationRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).Route53ResolverConn(ctx) + conn := meta.(*conns.AWSClient).Route53ResolverClient(ctx) id := d.Get("firewall_rule_group_association_id").(string) - ruleGroupAssociation, err := FindFirewallRuleGroupAssociationByID(ctx, conn, id) + ruleGroupAssociation, err := findFirewallRuleGroupAssociationByID(ctx, conn, id) if err != nil { return sdkdiag.AppendErrorf(diags, "reading Route53 Resolver Firewall Rule Group Association (%s): %s", id, err) } - d.SetId(aws.StringValue(ruleGroupAssociation.Id)) + d.SetId(aws.ToString(ruleGroupAssociation.Id)) d.Set(names.AttrARN, ruleGroupAssociation.Arn) d.Set(names.AttrCreationTime, ruleGroupAssociation.CreationTime) d.Set("creator_request_id", ruleGroupAssociation.CreatorRequestId) From 756c0250d813b80612ae42039d3c0d549c6245c5 Mon Sep 17 00:00:00 2001 From: Daniel Rieske Date: Sat, 10 Aug 2024 00:20:52 +0200 Subject: [PATCH 10/32] feat: migrated r/firewall_rule_group to sdkv2 --- .../route53resolver/firewall_rule_group.go | 34 +++++++++---------- .../firewall_rule_group_test.go | 14 ++++---- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/internal/service/route53resolver/firewall_rule_group.go b/internal/service/route53resolver/firewall_rule_group.go index e87dea418d05..d829ba79a698 100644 --- a/internal/service/route53resolver/firewall_rule_group.go +++ b/internal/service/route53resolver/firewall_rule_group.go @@ -7,14 +7,15 @@ import ( "context" "log" - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/service/route53resolver" - "github.com/hashicorp/aws-sdk-go-base/v2/awsv1shim/v2/tfawserr" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/route53resolver" + awstypes "github.com/aws/aws-sdk-go-v2/service/route53resolver/types" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/id" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-provider-aws/internal/conns" + "github.com/hashicorp/terraform-provider-aws/internal/errs" "github.com/hashicorp/terraform-provider-aws/internal/errs/sdkdiag" tftags "github.com/hashicorp/terraform-provider-aws/internal/tags" "github.com/hashicorp/terraform-provider-aws/internal/tfresource" @@ -24,7 +25,7 @@ import ( // @SDKResource("aws_route53_resolver_firewall_rule_group", name="Firewall Rule Group") // @Tags(identifierAttribute="arn") -func ResourceFirewallRuleGroup() *schema.Resource { +func resourceFirewallRuleGroup() *schema.Resource { return &schema.Resource{ CreateWithoutTimeout: resourceFirewallRuleGroupCreate, ReadWithoutTimeout: resourceFirewallRuleGroupRead, @@ -64,7 +65,7 @@ func ResourceFirewallRuleGroup() *schema.Resource { func resourceFirewallRuleGroupCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).Route53ResolverConn(ctx) + conn := meta.(*conns.AWSClient).Route53ResolverClient(ctx) name := d.Get(names.AttrName).(string) input := &route53resolver.CreateFirewallRuleGroupInput{ @@ -73,22 +74,22 @@ func resourceFirewallRuleGroupCreate(ctx context.Context, d *schema.ResourceData Tags: getTagsIn(ctx), } - output, err := conn.CreateFirewallRuleGroupWithContext(ctx, input) + output, err := conn.CreateFirewallRuleGroup(ctx, input) if err != nil { return sdkdiag.AppendErrorf(diags, "creating Route53 Resolver Firewall Rule Group (%s): %s", name, err) } - d.SetId(aws.StringValue(output.FirewallRuleGroup.Id)) + d.SetId(aws.ToString(output.FirewallRuleGroup.Id)) return append(diags, resourceFirewallRuleGroupRead(ctx, d, meta)...) } func resourceFirewallRuleGroupRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).Route53ResolverConn(ctx) + conn := meta.(*conns.AWSClient).Route53ResolverClient(ctx) - ruleGroup, err := FindFirewallRuleGroupByID(ctx, conn, d.Id()) + ruleGroup, err := findFirewallRuleGroupByID(ctx, conn, d.Id()) if !d.IsNewResource() && tfresource.NotFound(err) { log.Printf("[WARN] Route53 Resolver Firewall Rule Group (%s) not found, removing from state", d.Id()) @@ -100,8 +101,7 @@ func resourceFirewallRuleGroupRead(ctx context.Context, d *schema.ResourceData, return sdkdiag.AppendErrorf(diags, "reading Route53 Resolver Firewall Rule Group (%s): %s", d.Id(), err) } - arn := aws.StringValue(ruleGroup.Arn) - d.Set(names.AttrARN, arn) + d.Set(names.AttrARN, aws.ToString(ruleGroup.Arn)) d.Set(names.AttrName, ruleGroup.Name) d.Set(names.AttrOwnerID, ruleGroup.OwnerId) d.Set("share_status", ruleGroup.ShareStatus) @@ -116,14 +116,14 @@ func resourceFirewallRuleGroupUpdate(ctx context.Context, d *schema.ResourceData func resourceFirewallRuleGroupDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).Route53ResolverConn(ctx) + conn := meta.(*conns.AWSClient).Route53ResolverClient(ctx) log.Printf("[DEBUG] Deleting Route53 Resolver Firewall Rule Group: %s", d.Id()) - _, err := conn.DeleteFirewallRuleGroupWithContext(ctx, &route53resolver.DeleteFirewallRuleGroupInput{ + _, err := conn.DeleteFirewallRuleGroup(ctx, &route53resolver.DeleteFirewallRuleGroupInput{ FirewallRuleGroupId: aws.String(d.Id()), }) - if tfawserr.ErrCodeEquals(err, route53resolver.ErrCodeResourceNotFoundException) { + if errs.IsA[*awstypes.ResourceNotFoundException](err) { return diags } @@ -134,14 +134,14 @@ func resourceFirewallRuleGroupDelete(ctx context.Context, d *schema.ResourceData return diags } -func FindFirewallRuleGroupByID(ctx context.Context, conn *route53resolver.Route53Resolver, id string) (*route53resolver.FirewallRuleGroup, error) { +func findFirewallRuleGroupByID(ctx context.Context, conn *route53resolver.Client, id string) (*awstypes.FirewallRuleGroup, error) { input := &route53resolver.GetFirewallRuleGroupInput{ FirewallRuleGroupId: aws.String(id), } - output, err := conn.GetFirewallRuleGroupWithContext(ctx, input) + output, err := conn.GetFirewallRuleGroup(ctx, input) - if tfawserr.ErrCodeEquals(err, route53resolver.ErrCodeResourceNotFoundException) { + if errs.IsA[*awstypes.ResourceNotFoundException](err) { return nil, &retry.NotFoundError{ LastError: err, LastRequest: input, diff --git a/internal/service/route53resolver/firewall_rule_group_test.go b/internal/service/route53resolver/firewall_rule_group_test.go index 6e22dd6e4203..cc7595ce54e4 100644 --- a/internal/service/route53resolver/firewall_rule_group_test.go +++ b/internal/service/route53resolver/firewall_rule_group_test.go @@ -8,7 +8,7 @@ import ( "fmt" "testing" - "github.com/aws/aws-sdk-go/service/route53resolver" + awstypes "github.com/aws/aws-sdk-go-v2/service/route53resolver/types" sdkacctest "github.com/hashicorp/terraform-plugin-testing/helper/acctest" "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/hashicorp/terraform-plugin-testing/terraform" @@ -21,7 +21,7 @@ import ( func TestAccRoute53ResolverFirewallRuleGroup_basic(t *testing.T) { ctx := acctest.Context(t) - var v route53resolver.FirewallRuleGroup + var v awstypes.FirewallRuleGroup rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_route53_resolver_firewall_rule_group.test" @@ -53,7 +53,7 @@ func TestAccRoute53ResolverFirewallRuleGroup_basic(t *testing.T) { func TestAccRoute53ResolverFirewallRuleGroup_disappears(t *testing.T) { ctx := acctest.Context(t) - var v route53resolver.FirewallRuleGroup + var v awstypes.FirewallRuleGroup rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_route53_resolver_firewall_rule_group.test" @@ -77,7 +77,7 @@ func TestAccRoute53ResolverFirewallRuleGroup_disappears(t *testing.T) { func TestAccRoute53ResolverFirewallRuleGroup_tags(t *testing.T) { ctx := acctest.Context(t) - var v route53resolver.FirewallRuleGroup + var v awstypes.FirewallRuleGroup rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_route53_resolver_firewall_rule_group.test" @@ -135,7 +135,7 @@ func TestAccRoute53ResolverFirewallRuleGroup_tags(t *testing.T) { func testAccCheckFirewallRuleGroupDestroy(ctx context.Context) resource.TestCheckFunc { return func(s *terraform.State) error { - conn := acctest.Provider.Meta().(*conns.AWSClient).Route53ResolverConn(ctx) + conn := acctest.Provider.Meta().(*conns.AWSClient).Route53ResolverClient(ctx) for _, rs := range s.RootModule().Resources { if rs.Type != "aws_route53_resolver_firewall_rule_group" { @@ -159,7 +159,7 @@ func testAccCheckFirewallRuleGroupDestroy(ctx context.Context) resource.TestChec } } -func testAccCheckFirewallRuleGroupExists(ctx context.Context, n string, v *route53resolver.FirewallRuleGroup) resource.TestCheckFunc { +func testAccCheckFirewallRuleGroupExists(ctx context.Context, n string, v *awstypes.FirewallRuleGroup) resource.TestCheckFunc { return func(s *terraform.State) error { rs, ok := s.RootModule().Resources[n] if !ok { @@ -170,7 +170,7 @@ func testAccCheckFirewallRuleGroupExists(ctx context.Context, n string, v *route return fmt.Errorf("No Route53 Resolver Firewall Rule Group ID is set") } - conn := acctest.Provider.Meta().(*conns.AWSClient).Route53ResolverConn(ctx) + conn := acctest.Provider.Meta().(*conns.AWSClient).Route53ResolverClient(ctx) output, err := tfroute53resolver.FindFirewallRuleGroupByID(ctx, conn, rs.Primary.ID) From 8f4fadcb905df5e27f0762e8bdde9fdf797f4f28 Mon Sep 17 00:00:00 2001 From: Daniel Rieske Date: Sat, 10 Aug 2024 00:22:34 +0200 Subject: [PATCH 11/32] feat: migrated d/firewall_domain_list to sdkv2 --- .../firewall_domain_list_data_source.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/internal/service/route53resolver/firewall_domain_list_data_source.go b/internal/service/route53resolver/firewall_domain_list_data_source.go index 915d4caee5ea..7ec502218785 100644 --- a/internal/service/route53resolver/firewall_domain_list_data_source.go +++ b/internal/service/route53resolver/firewall_domain_list_data_source.go @@ -6,7 +6,7 @@ package route53resolver import ( "context" - "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go-v2/aws" "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" @@ -14,8 +14,8 @@ import ( "github.com/hashicorp/terraform-provider-aws/names" ) -// @SDKDataSource("aws_route53_resolver_firewall_domain_list") -func DataSourceFirewallDomainList() *schema.Resource { +// @SDKDataSource("aws_route53_resolver_firewall_domain_list", name="Firewall Domain List") +func dataSourceFirewallDomainList() *schema.Resource { return &schema.Resource{ ReadWithoutTimeout: dataSourceFirewallDomainListRead, @@ -66,16 +66,16 @@ func DataSourceFirewallDomainList() *schema.Resource { func dataSourceFirewallDomainListRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).Route53ResolverConn(ctx) + conn := meta.(*conns.AWSClient).Route53ResolverClient(ctx) id := d.Get("firewall_domain_list_id").(string) - firewallDomainList, err := FindFirewallDomainListByID(ctx, conn, id) + firewallDomainList, err := findFirewallDomainListByID(ctx, conn, id) if err != nil { return sdkdiag.AppendErrorf(diags, "reading Route53 Resolver Firewall Domain List (%s): %s", id, err) } - d.SetId(aws.StringValue(firewallDomainList.Id)) + d.SetId(aws.ToString(firewallDomainList.Id)) d.Set(names.AttrARN, firewallDomainList.Arn) d.Set(names.AttrCreationTime, firewallDomainList.CreationTime) d.Set("creator_request_id", firewallDomainList.CreatorRequestId) From 38b8525a85c7a6ba4413d5193430fa3bc63f565f Mon Sep 17 00:00:00 2001 From: Daniel Rieske Date: Sat, 10 Aug 2024 00:22:48 +0200 Subject: [PATCH 12/32] feat: migrated d/firewall_rule_group to sdkv2 --- .../firewall_rule_group_data_source.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/internal/service/route53resolver/firewall_rule_group_data_source.go b/internal/service/route53resolver/firewall_rule_group_data_source.go index d5b34a999a02..333ddc3959db 100644 --- a/internal/service/route53resolver/firewall_rule_group_data_source.go +++ b/internal/service/route53resolver/firewall_rule_group_data_source.go @@ -6,7 +6,7 @@ package route53resolver import ( "context" - "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go-v2/aws" "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" @@ -14,8 +14,8 @@ import ( "github.com/hashicorp/terraform-provider-aws/names" ) -// @SDKDataSource("aws_route53_resolver_firewall_rule_group") -func DataSourceFirewallRuleGroup() *schema.Resource { +// @SDKDataSource("aws_route53_resolver_firewall_rule_group", name="Firewall Rule Group") +func dataSourceFirewallRuleGroup() *schema.Resource { return &schema.Resource{ ReadWithoutTimeout: dataSourceFirewallRuleGroupRead, @@ -70,16 +70,16 @@ func DataSourceFirewallRuleGroup() *schema.Resource { func dataSourceFirewallRuleGroupRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).Route53ResolverConn(ctx) + conn := meta.(*conns.AWSClient).Route53ResolverClient(ctx) id := d.Get("firewall_rule_group_id").(string) - ruleGroup, err := FindFirewallRuleGroupByID(ctx, conn, id) + ruleGroup, err := findFirewallRuleGroupByID(ctx, conn, id) if err != nil { return sdkdiag.AppendErrorf(diags, "reading Route53 Resolver Firewall Rule Group (%s): %s", id, err) } - d.SetId(aws.StringValue(ruleGroup.Id)) + d.SetId(aws.ToString(ruleGroup.Id)) d.Set(names.AttrARN, ruleGroup.Arn) d.Set(names.AttrCreationTime, ruleGroup.CreationTime) d.Set("creator_request_id", ruleGroup.CreatorRequestId) From c2dbedc978b94c8f48c5a1dee9640832ebda57da Mon Sep 17 00:00:00 2001 From: Daniel Rieske Date: Sat, 10 Aug 2024 00:23:07 +0200 Subject: [PATCH 13/32] feat: migrated r/query_log_config_association to sdkv2 --- .../query_log_config_association.go | 62 ++++++++++--------- .../query_log_config_association_test.go | 12 ++-- 2 files changed, 38 insertions(+), 36 deletions(-) diff --git a/internal/service/route53resolver/query_log_config_association.go b/internal/service/route53resolver/query_log_config_association.go index 1f1838074f7c..59fabd21c459 100644 --- a/internal/service/route53resolver/query_log_config_association.go +++ b/internal/service/route53resolver/query_log_config_association.go @@ -9,20 +9,22 @@ import ( "log" "time" - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/service/route53resolver" - "github.com/hashicorp/aws-sdk-go-base/v2/awsv1shim/v2/tfawserr" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/route53resolver" + awstypes "github.com/aws/aws-sdk-go-v2/service/route53resolver/types" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-provider-aws/internal/conns" + "github.com/hashicorp/terraform-provider-aws/internal/enum" + "github.com/hashicorp/terraform-provider-aws/internal/errs" "github.com/hashicorp/terraform-provider-aws/internal/errs/sdkdiag" "github.com/hashicorp/terraform-provider-aws/internal/tfresource" "github.com/hashicorp/terraform-provider-aws/names" ) -// @SDKResource("aws_route53_resolver_query_log_config_association") -func ResourceQueryLogConfigAssociation() *schema.Resource { +// @SDKResource("aws_route53_resolver_query_log_config_association", name="Query Log Config Association") +func resourceQueryLogConfigAssociation() *schema.Resource { return &schema.Resource{ CreateWithoutTimeout: resourceQueryLogConfigAssociationCreate, ReadWithoutTimeout: resourceQueryLogConfigAssociationRead, @@ -49,20 +51,20 @@ func ResourceQueryLogConfigAssociation() *schema.Resource { func resourceQueryLogConfigAssociationCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).Route53ResolverConn(ctx) + conn := meta.(*conns.AWSClient).Route53ResolverClient(ctx) input := &route53resolver.AssociateResolverQueryLogConfigInput{ ResolverQueryLogConfigId: aws.String(d.Get("resolver_query_log_config_id").(string)), ResourceId: aws.String(d.Get(names.AttrResourceID).(string)), } - output, err := conn.AssociateResolverQueryLogConfigWithContext(ctx, input) + output, err := conn.AssociateResolverQueryLogConfig(ctx, input) if err != nil { return sdkdiag.AppendErrorf(diags, "creating Route53 Resolver Query Log Config Association: %s", err) } - d.SetId(aws.StringValue(output.ResolverQueryLogConfigAssociation.Id)) + d.SetId(aws.ToString(output.ResolverQueryLogConfigAssociation.Id)) if _, err := waitQueryLogConfigAssociationCreated(ctx, conn, d.Id()); err != nil { return sdkdiag.AppendErrorf(diags, "waiting for Route53 Resolver Query Log Config Association (%s) create: %s", d.Id(), err) @@ -73,9 +75,9 @@ func resourceQueryLogConfigAssociationCreate(ctx context.Context, d *schema.Reso func resourceQueryLogConfigAssociationRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).Route53ResolverConn(ctx) + conn := meta.(*conns.AWSClient).Route53ResolverClient(ctx) - queryLogConfigAssociation, err := FindResolverQueryLogConfigAssociationByID(ctx, conn, d.Id()) + queryLogConfigAssociation, err := findResolverQueryLogConfigAssociationByID(ctx, conn, d.Id()) if !d.IsNewResource() && tfresource.NotFound(err) { log.Printf("[WARN] Route53 Resolver Query Log Config Association (%s) not found, removing from state", d.Id()) @@ -95,15 +97,15 @@ func resourceQueryLogConfigAssociationRead(ctx context.Context, d *schema.Resour func resourceQueryLogConfigAssociationDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).Route53ResolverConn(ctx) + conn := meta.(*conns.AWSClient).Route53ResolverClient(ctx) log.Printf("[DEBUG] Deleting Route53 Resolver Query Log Config Association: %s", d.Id()) - _, err := conn.DisassociateResolverQueryLogConfigWithContext(ctx, &route53resolver.DisassociateResolverQueryLogConfigInput{ + _, err := conn.DisassociateResolverQueryLogConfig(ctx, &route53resolver.DisassociateResolverQueryLogConfigInput{ ResolverQueryLogConfigId: aws.String(d.Get("resolver_query_log_config_id").(string)), ResourceId: aws.String(d.Get(names.AttrResourceID).(string)), }) - if tfawserr.ErrCodeEquals(err, route53resolver.ErrCodeResourceNotFoundException) { + if errs.IsA[*awstypes.ResourceNotFoundException](err) { return diags } @@ -118,14 +120,14 @@ func resourceQueryLogConfigAssociationDelete(ctx context.Context, d *schema.Reso return diags } -func FindResolverQueryLogConfigAssociationByID(ctx context.Context, conn *route53resolver.Route53Resolver, id string) (*route53resolver.ResolverQueryLogConfigAssociation, error) { +func findResolverQueryLogConfigAssociationByID(ctx context.Context, conn *route53resolver.Client, id string) (*awstypes.ResolverQueryLogConfigAssociation, error) { input := &route53resolver.GetResolverQueryLogConfigAssociationInput{ ResolverQueryLogConfigAssociationId: aws.String(id), } - output, err := conn.GetResolverQueryLogConfigAssociationWithContext(ctx, input) + output, err := conn.GetResolverQueryLogConfigAssociation(ctx, input) - if tfawserr.ErrCodeEquals(err, route53resolver.ErrCodeResourceNotFoundException) { + if errs.IsA[*awstypes.ResourceNotFoundException](err) { return nil, &retry.NotFoundError{ LastError: err, LastRequest: input, @@ -143,9 +145,9 @@ func FindResolverQueryLogConfigAssociationByID(ctx context.Context, conn *route5 return output.ResolverQueryLogConfigAssociation, nil } -func statusQueryLogConfigAssociation(ctx context.Context, conn *route53resolver.Route53Resolver, id string) retry.StateRefreshFunc { +func statusQueryLogConfigAssociation(ctx context.Context, conn *route53resolver.Client, id string) retry.StateRefreshFunc { return func() (interface{}, string, error) { - output, err := FindResolverQueryLogConfigAssociationByID(ctx, conn, id) + output, err := findResolverQueryLogConfigAssociationByID(ctx, conn, id) if tfresource.NotFound(err) { return nil, "", nil @@ -155,7 +157,7 @@ func statusQueryLogConfigAssociation(ctx context.Context, conn *route53resolver. return nil, "", err } - return output, aws.StringValue(output.Status), nil + return output, string(output.Status), nil } } @@ -164,19 +166,19 @@ const ( queryLogConfigAssociationDeletedTimeout = 5 * time.Minute ) -func waitQueryLogConfigAssociationCreated(ctx context.Context, conn *route53resolver.Route53Resolver, id string) (*route53resolver.ResolverQueryLogConfigAssociation, error) { +func waitQueryLogConfigAssociationCreated(ctx context.Context, conn *route53resolver.Client, id string) (*awstypes.ResolverQueryLogConfigAssociation, error) { stateConf := &retry.StateChangeConf{ - Pending: []string{route53resolver.ResolverQueryLogConfigAssociationStatusCreating}, - Target: []string{route53resolver.ResolverQueryLogConfigAssociationStatusActive}, + Pending: enum.Slice(awstypes.ResolverQueryLogConfigAssociationStatusCreating), + Target: enum.Slice(awstypes.ResolverQueryLogConfigAssociationStatusActive), Refresh: statusQueryLogConfigAssociation(ctx, conn, id), Timeout: queryLogConfigAssociationCreatedTimeout, } outputRaw, err := stateConf.WaitForStateContext(ctx) - if output, ok := outputRaw.(*route53resolver.ResolverQueryLogConfigAssociation); ok { - if status := aws.StringValue(output.Status); status == route53resolver.ResolverQueryLogConfigAssociationStatusFailed { - tfresource.SetLastError(err, fmt.Errorf("%s: %s", aws.StringValue(output.Error), aws.StringValue(output.ErrorMessage))) + if output, ok := outputRaw.(*awstypes.ResolverQueryLogConfigAssociation); ok { + if status := output.Status; status == awstypes.ResolverQueryLogConfigAssociationStatusFailed { + tfresource.SetLastError(err, fmt.Errorf("%s: %s", string(output.Error), aws.ToString(output.ErrorMessage))) } return output, err @@ -185,9 +187,9 @@ func waitQueryLogConfigAssociationCreated(ctx context.Context, conn *route53reso return nil, err } -func waitQueryLogConfigAssociationDeleted(ctx context.Context, conn *route53resolver.Route53Resolver, id string) (*route53resolver.ResolverQueryLogConfigAssociation, error) { +func waitQueryLogConfigAssociationDeleted(ctx context.Context, conn *route53resolver.Client, id string) (*awstypes.ResolverQueryLogConfigAssociation, error) { stateConf := &retry.StateChangeConf{ - Pending: []string{route53resolver.ResolverQueryLogConfigAssociationStatusDeleting}, + Pending: enum.Slice(awstypes.ResolverQueryLogConfigAssociationStatusDeleting), Target: []string{}, Refresh: statusQueryLogConfigAssociation(ctx, conn, id), Timeout: queryLogConfigAssociationDeletedTimeout, @@ -195,9 +197,9 @@ func waitQueryLogConfigAssociationDeleted(ctx context.Context, conn *route53reso outputRaw, err := stateConf.WaitForStateContext(ctx) - if output, ok := outputRaw.(*route53resolver.ResolverQueryLogConfigAssociation); ok { - if status := aws.StringValue(output.Status); status == route53resolver.ResolverQueryLogConfigAssociationStatusFailed { - tfresource.SetLastError(err, fmt.Errorf("%s: %s", aws.StringValue(output.Error), aws.StringValue(output.ErrorMessage))) + if output, ok := outputRaw.(*awstypes.ResolverQueryLogConfigAssociation); ok { + if status := output.Status; status == awstypes.ResolverQueryLogConfigAssociationStatusFailed { + tfresource.SetLastError(err, fmt.Errorf("%s: %s", string(output.Error), aws.ToString(output.ErrorMessage))) } return output, err diff --git a/internal/service/route53resolver/query_log_config_association_test.go b/internal/service/route53resolver/query_log_config_association_test.go index 17bdc792ba8d..6642c6cad0c9 100644 --- a/internal/service/route53resolver/query_log_config_association_test.go +++ b/internal/service/route53resolver/query_log_config_association_test.go @@ -8,7 +8,7 @@ import ( "fmt" "testing" - "github.com/aws/aws-sdk-go/service/route53resolver" + awstypes "github.com/aws/aws-sdk-go-v2/service/route53resolver/types" sdkacctest "github.com/hashicorp/terraform-plugin-testing/helper/acctest" "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/hashicorp/terraform-plugin-testing/terraform" @@ -21,7 +21,7 @@ import ( func TestAccRoute53ResolverQueryLogConfigAssociation_basic(t *testing.T) { ctx := acctest.Context(t) - var v route53resolver.ResolverQueryLogConfigAssociation + var v awstypes.ResolverQueryLogConfigAssociation rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_route53_resolver_query_log_config_association.test" queryLogConfigResourceName := "aws_route53_resolver_query_log_config.test" @@ -52,7 +52,7 @@ func TestAccRoute53ResolverQueryLogConfigAssociation_basic(t *testing.T) { func TestAccRoute53ResolverQueryLogConfigAssociation_disappears(t *testing.T) { ctx := acctest.Context(t) - var v route53resolver.ResolverQueryLogConfigAssociation + var v awstypes.ResolverQueryLogConfigAssociation rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_route53_resolver_query_log_config_association.test" @@ -76,7 +76,7 @@ func TestAccRoute53ResolverQueryLogConfigAssociation_disappears(t *testing.T) { func testAccCheckQueryLogConfigAssociationDestroy(ctx context.Context) resource.TestCheckFunc { return func(s *terraform.State) error { - conn := acctest.Provider.Meta().(*conns.AWSClient).Route53ResolverConn(ctx) + conn := acctest.Provider.Meta().(*conns.AWSClient).Route53ResolverClient(ctx) for _, rs := range s.RootModule().Resources { if rs.Type != "aws_route53_resolver_query_log_config_association" { @@ -100,7 +100,7 @@ func testAccCheckQueryLogConfigAssociationDestroy(ctx context.Context) resource. } } -func testAccCheckQueryLogConfigAssociationExists(ctx context.Context, n string, v *route53resolver.ResolverQueryLogConfigAssociation) resource.TestCheckFunc { +func testAccCheckQueryLogConfigAssociationExists(ctx context.Context, n string, v *awstypes.ResolverQueryLogConfigAssociation) resource.TestCheckFunc { return func(s *terraform.State) error { rs, ok := s.RootModule().Resources[n] if !ok { @@ -111,7 +111,7 @@ func testAccCheckQueryLogConfigAssociationExists(ctx context.Context, n string, return fmt.Errorf("No Route53 Resolver Query Log Config Association ID is set") } - conn := acctest.Provider.Meta().(*conns.AWSClient).Route53ResolverConn(ctx) + conn := acctest.Provider.Meta().(*conns.AWSClient).Route53ResolverClient(ctx) output, err := tfroute53resolver.FindResolverQueryLogConfigAssociationByID(ctx, conn, rs.Primary.ID) From 14417374dae41704ca0b1f65c3c888b5d56a035d Mon Sep 17 00:00:00 2001 From: Daniel Rieske Date: Sat, 10 Aug 2024 00:23:24 +0200 Subject: [PATCH 14/32] feat: migrated r/query_log_config to sdkv2 --- .../route53resolver/query_log_config.go | 55 ++++++++++--------- .../route53resolver/query_log_config_test.go | 14 ++--- 2 files changed, 35 insertions(+), 34 deletions(-) diff --git a/internal/service/route53resolver/query_log_config.go b/internal/service/route53resolver/query_log_config.go index 998fc59927ce..fc9eeb5d2753 100644 --- a/internal/service/route53resolver/query_log_config.go +++ b/internal/service/route53resolver/query_log_config.go @@ -8,14 +8,16 @@ import ( "log" "time" - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/service/route53resolver" - "github.com/hashicorp/aws-sdk-go-base/v2/awsv1shim/v2/tfawserr" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/route53resolver" + awstypes "github.com/aws/aws-sdk-go-v2/service/route53resolver/types" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/id" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-provider-aws/internal/conns" + "github.com/hashicorp/terraform-provider-aws/internal/enum" + "github.com/hashicorp/terraform-provider-aws/internal/errs" "github.com/hashicorp/terraform-provider-aws/internal/errs/sdkdiag" tftags "github.com/hashicorp/terraform-provider-aws/internal/tags" "github.com/hashicorp/terraform-provider-aws/internal/tfresource" @@ -25,7 +27,7 @@ import ( // @SDKResource("aws_route53_resolver_query_log_config", name="Query Log Config") // @Tags(identifierAttribute="arn") -func ResourceQueryLogConfig() *schema.Resource { +func resourceQueryLogConfig() *schema.Resource { return &schema.Resource{ CreateWithoutTimeout: resourceQueryLogConfigCreate, ReadWithoutTimeout: resourceQueryLogConfigRead, @@ -71,7 +73,7 @@ func ResourceQueryLogConfig() *schema.Resource { func resourceQueryLogConfigCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).Route53ResolverConn(ctx) + conn := meta.(*conns.AWSClient).Route53ResolverClient(ctx) name := d.Get(names.AttrName).(string) input := &route53resolver.CreateResolverQueryLogConfigInput{ @@ -81,13 +83,13 @@ func resourceQueryLogConfigCreate(ctx context.Context, d *schema.ResourceData, m Tags: getTagsIn(ctx), } - output, err := conn.CreateResolverQueryLogConfigWithContext(ctx, input) + output, err := conn.CreateResolverQueryLogConfig(ctx, input) if err != nil { return sdkdiag.AppendErrorf(diags, "creating Route53 Resolver Query Log Config (%s): %s", name, err) } - d.SetId(aws.StringValue(output.ResolverQueryLogConfig.Id)) + d.SetId(aws.ToString(output.ResolverQueryLogConfig.Id)) if _, err := waitQueryLogConfigCreated(ctx, conn, d.Id()); err != nil { return sdkdiag.AppendErrorf(diags, "waiting for Route53 Resolver Query Log Config (%s) create: %s", d.Id(), err) @@ -98,9 +100,9 @@ func resourceQueryLogConfigCreate(ctx context.Context, d *schema.ResourceData, m func resourceQueryLogConfigRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).Route53ResolverConn(ctx) + conn := meta.(*conns.AWSClient).Route53ResolverClient(ctx) - queryLogConfig, err := FindResolverQueryLogConfigByID(ctx, conn, d.Id()) + queryLogConfig, err := findResolverQueryLogConfigByID(ctx, conn, d.Id()) if !d.IsNewResource() && tfresource.NotFound(err) { log.Printf("[WARN] Route53 Resolver Query Log Config (%s) not found, removing from state", d.Id()) @@ -112,8 +114,7 @@ func resourceQueryLogConfigRead(ctx context.Context, d *schema.ResourceData, met return sdkdiag.AppendErrorf(diags, "reading Route53 Resolver Query Log Config (%s): %s", d.Id(), err) } - arn := aws.StringValue(queryLogConfig.Arn) - d.Set(names.AttrARN, arn) + d.Set(names.AttrARN, queryLogConfig.Arn) d.Set(names.AttrDestinationARN, queryLogConfig.DestinationArn) d.Set(names.AttrName, queryLogConfig.Name) d.Set(names.AttrOwnerID, queryLogConfig.OwnerId) @@ -129,14 +130,14 @@ func resourceQueryLogConfigUpdate(ctx context.Context, d *schema.ResourceData, m func resourceQueryLogConfigDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).Route53ResolverConn(ctx) + conn := meta.(*conns.AWSClient).Route53ResolverClient(ctx) log.Printf("[DEBUG] Deleting Route53 Resolver Query Log Config: %s", d.Id()) - _, err := conn.DeleteResolverQueryLogConfigWithContext(ctx, &route53resolver.DeleteResolverQueryLogConfigInput{ + _, err := conn.DeleteResolverQueryLogConfig(ctx, &route53resolver.DeleteResolverQueryLogConfigInput{ ResolverQueryLogConfigId: aws.String(d.Id()), }) - if tfawserr.ErrCodeEquals(err, route53resolver.ErrCodeResourceNotFoundException) { + if errs.IsA[*awstypes.ResourceNotFoundException](err) { return diags } @@ -151,14 +152,14 @@ func resourceQueryLogConfigDelete(ctx context.Context, d *schema.ResourceData, m return diags } -func FindResolverQueryLogConfigByID(ctx context.Context, conn *route53resolver.Route53Resolver, id string) (*route53resolver.ResolverQueryLogConfig, error) { +func findResolverQueryLogConfigByID(ctx context.Context, conn *route53resolver.Client, id string) (*awstypes.ResolverQueryLogConfig, error) { input := &route53resolver.GetResolverQueryLogConfigInput{ ResolverQueryLogConfigId: aws.String(id), } - output, err := conn.GetResolverQueryLogConfigWithContext(ctx, input) + output, err := conn.GetResolverQueryLogConfig(ctx, input) - if tfawserr.ErrCodeEquals(err, route53resolver.ErrCodeResourceNotFoundException) { + if errs.IsA[*awstypes.ResourceNotFoundException](err) { return nil, &retry.NotFoundError{ LastError: err, LastRequest: input, @@ -176,9 +177,9 @@ func FindResolverQueryLogConfigByID(ctx context.Context, conn *route53resolver.R return output.ResolverQueryLogConfig, nil } -func statusQueryLogConfig(ctx context.Context, conn *route53resolver.Route53Resolver, id string) retry.StateRefreshFunc { +func statusQueryLogConfig(ctx context.Context, conn *route53resolver.Client, id string) retry.StateRefreshFunc { return func() (interface{}, string, error) { - output, err := FindResolverQueryLogConfigByID(ctx, conn, id) + output, err := findResolverQueryLogConfigByID(ctx, conn, id) if tfresource.NotFound(err) { return nil, "", nil @@ -188,7 +189,7 @@ func statusQueryLogConfig(ctx context.Context, conn *route53resolver.Route53Reso return nil, "", err } - return output, aws.StringValue(output.Status), nil + return output, string(output.Status), nil } } @@ -197,26 +198,26 @@ const ( queryLogConfigDeletedTimeout = 5 * time.Minute ) -func waitQueryLogConfigCreated(ctx context.Context, conn *route53resolver.Route53Resolver, id string) (*route53resolver.ResolverQueryLogConfig, error) { +func waitQueryLogConfigCreated(ctx context.Context, conn *route53resolver.Client, id string) (*awstypes.ResolverQueryLogConfig, error) { stateConf := &retry.StateChangeConf{ - Pending: []string{route53resolver.ResolverQueryLogConfigStatusCreating}, - Target: []string{route53resolver.ResolverQueryLogConfigStatusCreated}, + Pending: enum.Slice(awstypes.ResolverQueryLogConfigStatusCreating), + Target: enum.Slice(awstypes.ResolverQueryLogConfigStatusCreated), Refresh: statusQueryLogConfig(ctx, conn, id), Timeout: queryLogConfigCreatedTimeout, } outputRaw, err := stateConf.WaitForStateContext(ctx) - if output, ok := outputRaw.(*route53resolver.ResolverQueryLogConfig); ok { + if output, ok := outputRaw.(*awstypes.ResolverQueryLogConfig); ok { return output, err } return nil, err } -func waitQueryLogConfigDeleted(ctx context.Context, conn *route53resolver.Route53Resolver, id string) (*route53resolver.ResolverQueryLogConfig, error) { +func waitQueryLogConfigDeleted(ctx context.Context, conn *route53resolver.Client, id string) (*awstypes.ResolverQueryLogConfig, error) { stateConf := &retry.StateChangeConf{ - Pending: []string{route53resolver.ResolverQueryLogConfigStatusDeleting}, + Pending: enum.Slice(awstypes.ResolverQueryLogConfigStatusDeleting), Target: []string{}, Refresh: statusQueryLogConfig(ctx, conn, id), Timeout: queryLogConfigDeletedTimeout, @@ -224,7 +225,7 @@ func waitQueryLogConfigDeleted(ctx context.Context, conn *route53resolver.Route5 outputRaw, err := stateConf.WaitForStateContext(ctx) - if output, ok := outputRaw.(*route53resolver.ResolverQueryLogConfig); ok { + if output, ok := outputRaw.(*awstypes.ResolverQueryLogConfig); ok { return output, err } diff --git a/internal/service/route53resolver/query_log_config_test.go b/internal/service/route53resolver/query_log_config_test.go index 4087dad6627d..48b9ff5e9b53 100644 --- a/internal/service/route53resolver/query_log_config_test.go +++ b/internal/service/route53resolver/query_log_config_test.go @@ -8,7 +8,7 @@ import ( "fmt" "testing" - "github.com/aws/aws-sdk-go/service/route53resolver" + awstypes "github.com/aws/aws-sdk-go-v2/service/route53resolver/types" sdkacctest "github.com/hashicorp/terraform-plugin-testing/helper/acctest" "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/hashicorp/terraform-plugin-testing/terraform" @@ -21,7 +21,7 @@ import ( func TestAccRoute53ResolverQueryLogConfig_basic(t *testing.T) { ctx := acctest.Context(t) - var v route53resolver.ResolverQueryLogConfig + var v awstypes.ResolverQueryLogConfig rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_route53_resolver_query_log_config.test" s3BucketResourceName := "aws_s3_bucket.test" @@ -54,7 +54,7 @@ func TestAccRoute53ResolverQueryLogConfig_basic(t *testing.T) { func TestAccRoute53ResolverQueryLogConfig_disappears(t *testing.T) { ctx := acctest.Context(t) - var v route53resolver.ResolverQueryLogConfig + var v awstypes.ResolverQueryLogConfig rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_route53_resolver_query_log_config.test" @@ -78,7 +78,7 @@ func TestAccRoute53ResolverQueryLogConfig_disappears(t *testing.T) { func TestAccRoute53ResolverQueryLogConfig_tags(t *testing.T) { ctx := acctest.Context(t) - var v route53resolver.ResolverQueryLogConfig + var v awstypes.ResolverQueryLogConfig rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_route53_resolver_query_log_config.test" cwLogGroupResourceName := "aws_cloudwatch_log_group.test" @@ -137,7 +137,7 @@ func TestAccRoute53ResolverQueryLogConfig_tags(t *testing.T) { func testAccCheckQueryLogConfigDestroy(ctx context.Context) resource.TestCheckFunc { return func(s *terraform.State) error { - conn := acctest.Provider.Meta().(*conns.AWSClient).Route53ResolverConn(ctx) + conn := acctest.Provider.Meta().(*conns.AWSClient).Route53ResolverClient(ctx) for _, rs := range s.RootModule().Resources { if rs.Type != "aws_route53_resolver_query_log_config" { @@ -161,7 +161,7 @@ func testAccCheckQueryLogConfigDestroy(ctx context.Context) resource.TestCheckFu } } -func testAccCheckQueryLogConfigExists(ctx context.Context, n string, v *route53resolver.ResolverQueryLogConfig) resource.TestCheckFunc { +func testAccCheckQueryLogConfigExists(ctx context.Context, n string, v *awstypes.ResolverQueryLogConfig) resource.TestCheckFunc { return func(s *terraform.State) error { rs, ok := s.RootModule().Resources[n] if !ok { @@ -172,7 +172,7 @@ func testAccCheckQueryLogConfigExists(ctx context.Context, n string, v *route53r return fmt.Errorf("No Route53 Resolver Query Log Config ID is set") } - conn := acctest.Provider.Meta().(*conns.AWSClient).Route53ResolverConn(ctx) + conn := acctest.Provider.Meta().(*conns.AWSClient).Route53ResolverClient(ctx) output, err := tfroute53resolver.FindResolverQueryLogConfigByID(ctx, conn, rs.Primary.ID) From 957d44d6aa7f663593de6063e9cf90c44d5060ac Mon Sep 17 00:00:00 2001 From: Daniel Rieske Date: Sat, 10 Aug 2024 00:23:35 +0200 Subject: [PATCH 15/32] feat: migrated r/firewall_rule to sdkv2 --- .../service/route53resolver/firewall_rule.go | 135 +++++++++--------- .../route53resolver/firewall_rule_test.go | 20 +-- 2 files changed, 77 insertions(+), 78 deletions(-) diff --git a/internal/service/route53resolver/firewall_rule.go b/internal/service/route53resolver/firewall_rule.go index 34d9bd2898c0..25ee6ca900e4 100644 --- a/internal/service/route53resolver/firewall_rule.go +++ b/internal/service/route53resolver/firewall_rule.go @@ -9,22 +9,24 @@ import ( "log" "strings" - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/service/route53resolver" - "github.com/hashicorp/aws-sdk-go-base/v2/awsv1shim/v2/tfawserr" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/route53resolver" + awstypes "github.com/aws/aws-sdk-go-v2/service/route53resolver/types" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/id" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/hashicorp/terraform-provider-aws/internal/conns" + "github.com/hashicorp/terraform-provider-aws/internal/enum" + "github.com/hashicorp/terraform-provider-aws/internal/errs" "github.com/hashicorp/terraform-provider-aws/internal/errs/sdkdiag" "github.com/hashicorp/terraform-provider-aws/internal/tfresource" "github.com/hashicorp/terraform-provider-aws/names" ) -// @SDKResource("aws_route53_resolver_firewall_rule") -func ResourceFirewallRule() *schema.Resource { +// @SDKResource("aws_route53_resolver_firewall_rule", name="Firewall Rule") +func resourceFirewallRule() *schema.Resource { return &schema.Resource{ CreateWithoutTimeout: resourceFirewallRuleCreate, ReadWithoutTimeout: resourceFirewallRuleRead, @@ -37,14 +39,14 @@ func ResourceFirewallRule() *schema.Resource { Schema: map[string]*schema.Schema{ names.AttrAction: { - Type: schema.TypeString, - Required: true, - ValidateFunc: validation.StringInSlice(route53resolver.Action_Values(), false), + Type: schema.TypeString, + Required: true, + ValidateDiagFunc: enum.Validate[awstypes.Action](), }, "block_override_dns_type": { - Type: schema.TypeString, - Optional: true, - ValidateFunc: validation.StringInSlice(route53resolver.BlockOverrideDnsType_Values(), false), + Type: schema.TypeString, + Optional: true, + ValidateDiagFunc: enum.Validate[awstypes.BlockOverrideDnsType](), }, "block_override_domain": { Type: schema.TypeString, @@ -57,9 +59,9 @@ func ResourceFirewallRule() *schema.Resource { ValidateFunc: validation.IntBetween(0, 604800), }, "block_response": { - Type: schema.TypeString, - Optional: true, - ValidateFunc: validation.StringInSlice(route53resolver.BlockResponse_Values(), false), + Type: schema.TypeString, + Optional: true, + ValidateDiagFunc: enum.Validate[awstypes.BlockResponse](), }, "firewall_domain_list_id": { Type: schema.TypeString, @@ -68,10 +70,10 @@ func ResourceFirewallRule() *schema.Resource { ValidateFunc: validation.StringLenBetween(1, 64), }, "firewall_domain_redirection_action": { - Type: schema.TypeString, - Optional: true, - Default: route53resolver.FirewallDomainRedirectionActionInspectRedirectionDomain, - ValidateFunc: validation.StringInSlice(route53resolver.FirewallDomainRedirectionAction_Values(), false), + Type: schema.TypeString, + Optional: true, + Default: awstypes.FirewallDomainRedirectionActionInspectRedirectionDomain, + ValidateDiagFunc: enum.Validate[awstypes.FirewallDomainRedirectionAction](), }, "firewall_rule_group_id": { Type: schema.TypeString, @@ -98,24 +100,24 @@ func ResourceFirewallRule() *schema.Resource { func resourceFirewallRuleCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).Route53ResolverConn(ctx) + conn := meta.(*conns.AWSClient).Route53ResolverClient(ctx) firewallDomainListID := d.Get("firewall_domain_list_id").(string) firewallRuleGroupID := d.Get("firewall_rule_group_id").(string) - ruleID := FirewallRuleCreateResourceID(firewallRuleGroupID, firewallDomainListID) + ruleID := firewallRuleCreateResourceID(firewallRuleGroupID, firewallDomainListID) name := d.Get(names.AttrName).(string) input := &route53resolver.CreateFirewallRuleInput{ - Action: aws.String(d.Get(names.AttrAction).(string)), + Action: awstypes.Action(d.Get(names.AttrAction).(string)), CreatorRequestId: aws.String(id.PrefixedUniqueId("tf-r53-resolver-firewall-rule-")), FirewallRuleGroupId: aws.String(firewallRuleGroupID), FirewallDomainListId: aws.String(firewallDomainListID), - FirewallDomainRedirectionAction: aws.String(d.Get("firewall_domain_redirection_action").(string)), + FirewallDomainRedirectionAction: awstypes.FirewallDomainRedirectionAction(d.Get("firewall_domain_redirection_action").(string)), Name: aws.String(name), - Priority: aws.Int64(int64(d.Get(names.AttrPriority).(int))), + Priority: aws.Int32(int32(d.Get(names.AttrPriority).(int))), } if v, ok := d.GetOk("block_override_dns_type"); ok { - input.BlockOverrideDnsType = aws.String(v.(string)) + input.BlockOverrideDnsType = awstypes.BlockOverrideDnsType(v.(string)) } if v, ok := d.GetOk("block_override_domain"); ok { @@ -123,18 +125,18 @@ func resourceFirewallRuleCreate(ctx context.Context, d *schema.ResourceData, met } if v, ok := d.GetOk("block_override_ttl"); ok { - input.BlockOverrideTtl = aws.Int64(int64(v.(int))) + input.BlockOverrideTtl = aws.Int32(int32(v.(int))) } if v, ok := d.GetOk("block_response"); ok { - input.BlockResponse = aws.String(v.(string)) + input.BlockResponse = awstypes.BlockResponse(v.(string)) } if v, ok := d.GetOk("q_type"); ok { input.Qtype = aws.String(v.(string)) } - _, err := conn.CreateFirewallRuleWithContext(ctx, input) + _, err := conn.CreateFirewallRule(ctx, input) if err != nil { return sdkdiag.AppendErrorf(diags, "creating Route53 Resolver Firewall Rule (%s): %s", name, err) @@ -147,15 +149,15 @@ func resourceFirewallRuleCreate(ctx context.Context, d *schema.ResourceData, met func resourceFirewallRuleRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).Route53ResolverConn(ctx) + conn := meta.(*conns.AWSClient).Route53ResolverClient(ctx) - firewallRuleGroupID, firewallDomainListID, err := FirewallRuleParseResourceID(d.Id()) + firewallRuleGroupID, firewallDomainListID, err := firewallRuleParseResourceID(d.Id()) if err != nil { return sdkdiag.AppendFromErr(diags, err) } - firewallRule, err := FindFirewallRuleByTwoPartKey(ctx, conn, firewallRuleGroupID, firewallDomainListID) + firewallRule, err := findFirewallRuleByTwoPartKey(ctx, conn, firewallRuleGroupID, firewallDomainListID) if !d.IsNewResource() && tfresource.NotFound(err) { log.Printf("[WARN] Route53 Resolver Firewall Rule (%s) not found, removing from state", d.Id()) @@ -184,24 +186,24 @@ func resourceFirewallRuleRead(ctx context.Context, d *schema.ResourceData, meta func resourceFirewallRuleUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).Route53ResolverConn(ctx) + conn := meta.(*conns.AWSClient).Route53ResolverClient(ctx) - firewallRuleGroupID, firewallDomainListID, err := FirewallRuleParseResourceID(d.Id()) + firewallRuleGroupID, firewallDomainListID, err := firewallRuleParseResourceID(d.Id()) if err != nil { return sdkdiag.AppendFromErr(diags, err) } input := &route53resolver.UpdateFirewallRuleInput{ - Action: aws.String(d.Get(names.AttrAction).(string)), + Action: awstypes.Action(d.Get(names.AttrAction).(string)), FirewallDomainListId: aws.String(firewallDomainListID), FirewallRuleGroupId: aws.String(firewallRuleGroupID), Name: aws.String(d.Get(names.AttrName).(string)), - Priority: aws.Int64(int64(d.Get(names.AttrPriority).(int))), + Priority: aws.Int32(int32(d.Get(names.AttrPriority).(int))), } if v, ok := d.GetOk("block_override_dns_type"); ok { - input.BlockOverrideDnsType = aws.String(v.(string)) + input.BlockOverrideDnsType = awstypes.BlockOverrideDnsType(v.(string)) } if v, ok := d.GetOk("block_override_domain"); ok { @@ -209,22 +211,22 @@ func resourceFirewallRuleUpdate(ctx context.Context, d *schema.ResourceData, met } if v, ok := d.GetOk("block_override_ttl"); ok { - input.BlockOverrideTtl = aws.Int64(int64(v.(int))) + input.BlockOverrideTtl = aws.Int32(int32(v.(int))) } if v, ok := d.GetOk("block_response"); ok { - input.BlockResponse = aws.String(v.(string)) + input.BlockResponse = awstypes.BlockResponse(v.(string)) } if v, ok := d.GetOk("firewall_domain_redirection_action"); ok { - input.FirewallDomainRedirectionAction = aws.String(v.(string)) + input.FirewallDomainRedirectionAction = awstypes.FirewallDomainRedirectionAction(v.(string)) } if v, ok := d.GetOk("q_type"); ok { input.Qtype = aws.String(v.(string)) } - _, err = conn.UpdateFirewallRuleWithContext(ctx, input) + _, err = conn.UpdateFirewallRule(ctx, input) if err != nil { return sdkdiag.AppendErrorf(diags, "updating Route53 Resolver Firewall Rule (%s): %s", d.Id(), err) @@ -235,9 +237,9 @@ func resourceFirewallRuleUpdate(ctx context.Context, d *schema.ResourceData, met func resourceFirewallRuleDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).Route53ResolverConn(ctx) + conn := meta.(*conns.AWSClient).Route53ResolverClient(ctx) - firewallRuleGroupID, firewallDomainListID, err := FirewallRuleParseResourceID(d.Id()) + firewallRuleGroupID, firewallDomainListID, err := firewallRuleParseResourceID(d.Id()) if err != nil { return sdkdiag.AppendFromErr(diags, err) @@ -253,9 +255,9 @@ func resourceFirewallRuleDelete(ctx context.Context, d *schema.ResourceData, met } log.Printf("[DEBUG] Deleting Route53 Resolver Firewall Rule: %s", d.Id()) - _, err = conn.DeleteFirewallRuleWithContext(ctx, input) + _, err = conn.DeleteFirewallRule(ctx, input) - if tfawserr.ErrCodeEquals(err, route53resolver.ErrCodeResourceNotFoundException) { + if errs.IsA[*awstypes.ResourceNotFoundException](err) { return diags } @@ -268,14 +270,14 @@ func resourceFirewallRuleDelete(ctx context.Context, d *schema.ResourceData, met const firewallRuleIDSeparator = ":" -func FirewallRuleCreateResourceID(firewallRuleGroupID, firewallDomainListID string) string { +func firewallRuleCreateResourceID(firewallRuleGroupID, firewallDomainListID string) string { parts := []string{firewallRuleGroupID, firewallDomainListID} id := strings.Join(parts, firewallRuleIDSeparator) return id } -func FirewallRuleParseResourceID(id string) (string, string, error) { +func firewallRuleParseResourceID(id string) (string, string, error) { parts := strings.SplitN(id, firewallRuleIDSeparator, 2) if len(parts) < 2 || parts[0] == "" || parts[1] == "" { @@ -285,16 +287,16 @@ func FirewallRuleParseResourceID(id string) (string, string, error) { return parts[0], parts[1], nil } -func FindFirewallRuleByTwoPartKey(ctx context.Context, conn *route53resolver.Route53Resolver, firewallRuleGroupID, firewallDomainListID string) (*route53resolver.FirewallRule, error) { - output, err := findFirewallRules(ctx, conn, firewallRuleGroupID, func(rule *route53resolver.FirewallRule) bool { - return aws.StringValue(rule.FirewallDomainListId) == firewallDomainListID +func findFirewallRuleByTwoPartKey(ctx context.Context, conn *route53resolver.Client, firewallRuleGroupID, firewallDomainListID string) (*awstypes.FirewallRule, error) { + output, err := findFirewallRules(ctx, conn, firewallRuleGroupID, func(rule awstypes.FirewallRule) bool { + return aws.ToString(rule.FirewallDomainListId) == firewallDomainListID }) if err != nil { return nil, err } - if len(output) == 0 || output[0] == nil { + if len(output) == 0 { return nil, tfresource.NewEmptyResultError(firewallRuleGroupID) } @@ -302,18 +304,28 @@ func FindFirewallRuleByTwoPartKey(ctx context.Context, conn *route53resolver.Rou return nil, tfresource.NewTooManyResultsError(count, firewallRuleGroupID) } - return output[0], nil + return &output[0], nil } -func findFirewallRules(ctx context.Context, conn *route53resolver.Route53Resolver, firewallRuleGroupID string, f func(*route53resolver.FirewallRule) bool) ([]*route53resolver.FirewallRule, error) { +func findFirewallRules(ctx context.Context, conn *route53resolver.Client, firewallRuleGroupID string, f func(awstypes.FirewallRule) bool) ([]awstypes.FirewallRule, error) { input := &route53resolver.ListFirewallRulesInput{ FirewallRuleGroupId: aws.String(firewallRuleGroupID), } - var output []*route53resolver.FirewallRule + var output []awstypes.FirewallRule + + pages := route53resolver.NewListFirewallRulesPaginator(conn, input) + for pages.HasMorePages() { + page, err := pages.NextPage(ctx) + + if errs.IsA[*awstypes.ResourceNotFoundException](err) { + return nil, &retry.NotFoundError{ + LastError: err, + LastRequest: input, + } + } - err := conn.ListFirewallRulesPagesWithContext(ctx, input, func(page *route53resolver.ListFirewallRulesOutput, lastPage bool) bool { - if page == nil { - return !lastPage + if err != nil { + return nil, err } for _, v := range page.FirewallRules { @@ -321,19 +333,6 @@ func findFirewallRules(ctx context.Context, conn *route53resolver.Route53Resolve output = append(output, v) } } - - return !lastPage - }) - - if tfawserr.ErrCodeEquals(err, route53resolver.ErrCodeResourceNotFoundException) { - return nil, &retry.NotFoundError{ - LastError: err, - LastRequest: input, - } - } - - if err != nil { - return nil, err } return output, nil diff --git a/internal/service/route53resolver/firewall_rule_test.go b/internal/service/route53resolver/firewall_rule_test.go index 4cabdc707774..8885b199a42a 100644 --- a/internal/service/route53resolver/firewall_rule_test.go +++ b/internal/service/route53resolver/firewall_rule_test.go @@ -8,7 +8,7 @@ import ( "fmt" "testing" - "github.com/aws/aws-sdk-go/service/route53resolver" + awstypes "github.com/aws/aws-sdk-go-v2/service/route53resolver/types" sdkacctest "github.com/hashicorp/terraform-plugin-testing/helper/acctest" "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/hashicorp/terraform-plugin-testing/terraform" @@ -21,7 +21,7 @@ import ( func TestAccRoute53ResolverFirewallRule_basic(t *testing.T) { ctx := acctest.Context(t) - var v route53resolver.FirewallRule + var v awstypes.FirewallRule rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_route53_resolver_firewall_rule.test" @@ -54,7 +54,7 @@ func TestAccRoute53ResolverFirewallRule_basic(t *testing.T) { func TestAccRoute53ResolverFirewallRule_update_firewallDomainRedirectionAction(t *testing.T) { ctx := acctest.Context(t) - var v route53resolver.FirewallRule + var v awstypes.FirewallRule rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_route53_resolver_firewall_rule.test" @@ -91,7 +91,7 @@ func TestAccRoute53ResolverFirewallRule_update_firewallDomainRedirectionAction(t func TestAccRoute53ResolverFirewallRule_block(t *testing.T) { ctx := acctest.Context(t) - var v route53resolver.FirewallRule + var v awstypes.FirewallRule rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_route53_resolver_firewall_rule.test" @@ -121,7 +121,7 @@ func TestAccRoute53ResolverFirewallRule_block(t *testing.T) { func TestAccRoute53ResolverFirewallRule_blockOverride(t *testing.T) { ctx := acctest.Context(t) - var v route53resolver.FirewallRule + var v awstypes.FirewallRule rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_route53_resolver_firewall_rule.test" @@ -154,7 +154,7 @@ func TestAccRoute53ResolverFirewallRule_blockOverride(t *testing.T) { func TestAccRoute53ResolverFirewallRule_qType(t *testing.T) { ctx := acctest.Context(t) - var v route53resolver.FirewallRule + var v awstypes.FirewallRule rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_route53_resolver_firewall_rule.test" @@ -187,7 +187,7 @@ func TestAccRoute53ResolverFirewallRule_qType(t *testing.T) { func TestAccRoute53ResolverFirewallRule_disappears(t *testing.T) { ctx := acctest.Context(t) - var v route53resolver.FirewallRule + var v awstypes.FirewallRule rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_route53_resolver_firewall_rule.test" @@ -211,7 +211,7 @@ func TestAccRoute53ResolverFirewallRule_disappears(t *testing.T) { func testAccCheckFirewallRuleDestroy(ctx context.Context) resource.TestCheckFunc { return func(s *terraform.State) error { - conn := acctest.Provider.Meta().(*conns.AWSClient).Route53ResolverConn(ctx) + conn := acctest.Provider.Meta().(*conns.AWSClient).Route53ResolverClient(ctx) for _, rs := range s.RootModule().Resources { if rs.Type != "aws_route53_resolver_firewall_rule" { @@ -241,7 +241,7 @@ func testAccCheckFirewallRuleDestroy(ctx context.Context) resource.TestCheckFunc } } -func testAccCheckFirewallRuleExists(ctx context.Context, n string, v *route53resolver.FirewallRule) resource.TestCheckFunc { +func testAccCheckFirewallRuleExists(ctx context.Context, n string, v *awstypes.FirewallRule) resource.TestCheckFunc { return func(s *terraform.State) error { rs, ok := s.RootModule().Resources[n] if !ok { @@ -258,7 +258,7 @@ func testAccCheckFirewallRuleExists(ctx context.Context, n string, v *route53res return err } - conn := acctest.Provider.Meta().(*conns.AWSClient).Route53ResolverConn(ctx) + conn := acctest.Provider.Meta().(*conns.AWSClient).Route53ResolverClient(ctx) output, err := tfroute53resolver.FindFirewallRuleByTwoPartKey(ctx, conn, firewallRuleGroupID, firewallDomainListID) From a8d2b788290e13247964e17417d24ad5e04ff4e7 Mon Sep 17 00:00:00 2001 From: Daniel Rieske Date: Sat, 10 Aug 2024 00:23:45 +0200 Subject: [PATCH 16/32] feat: migrated r/rule_association to sdkv2 --- .../route53resolver/rule_association.go | 58 ++++++++++--------- .../route53resolver/rule_association_test.go | 14 ++--- 2 files changed, 37 insertions(+), 35 deletions(-) diff --git a/internal/service/route53resolver/rule_association.go b/internal/service/route53resolver/rule_association.go index 787c45d58b7a..8e546661bd4a 100644 --- a/internal/service/route53resolver/rule_association.go +++ b/internal/service/route53resolver/rule_association.go @@ -9,21 +9,23 @@ import ( "log" "time" - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/service/route53resolver" - "github.com/hashicorp/aws-sdk-go-base/v2/awsv1shim/v2/tfawserr" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/route53resolver" + awstypes "github.com/aws/aws-sdk-go-v2/service/route53resolver/types" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/hashicorp/terraform-provider-aws/internal/conns" + "github.com/hashicorp/terraform-provider-aws/internal/enum" + "github.com/hashicorp/terraform-provider-aws/internal/errs" "github.com/hashicorp/terraform-provider-aws/internal/errs/sdkdiag" "github.com/hashicorp/terraform-provider-aws/internal/tfresource" "github.com/hashicorp/terraform-provider-aws/names" ) -// @SDKResource("aws_route53_resolver_rule_association") -func ResourceRuleAssociation() *schema.Resource { +// @SDKResource("aws_route53_resolver_rule_association", name="Rule Association") +func resourceRuleAssociation() *schema.Resource { return &schema.Resource{ CreateWithoutTimeout: resourceRuleAssociationCreate, ReadWithoutTimeout: resourceRuleAssociationRead, @@ -63,7 +65,7 @@ func ResourceRuleAssociation() *schema.Resource { func resourceRuleAssociationCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).Route53ResolverConn(ctx) + conn := meta.(*conns.AWSClient).Route53ResolverClient(ctx) input := &route53resolver.AssociateResolverRuleInput{ ResolverRuleId: aws.String(d.Get("resolver_rule_id").(string)), @@ -74,13 +76,13 @@ func resourceRuleAssociationCreate(ctx context.Context, d *schema.ResourceData, input.Name = aws.String(v.(string)) } - output, err := conn.AssociateResolverRuleWithContext(ctx, input) + output, err := conn.AssociateResolverRule(ctx, input) if err != nil { return sdkdiag.AppendErrorf(diags, "creating Route53 Resolver Rule Association: %s", err) } - d.SetId(aws.StringValue(output.ResolverRuleAssociation.Id)) + d.SetId(aws.ToString(output.ResolverRuleAssociation.Id)) if _, err := waitRuleAssociationCreated(ctx, conn, d.Id(), d.Timeout(schema.TimeoutCreate)); err != nil { return sdkdiag.AppendErrorf(diags, "waiting for Route53 Resolver Rule Association (%s) create: %s", d.Id(), err) @@ -91,9 +93,9 @@ func resourceRuleAssociationCreate(ctx context.Context, d *schema.ResourceData, func resourceRuleAssociationRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).Route53ResolverConn(ctx) + conn := meta.(*conns.AWSClient).Route53ResolverClient(ctx) - ruleAssociation, err := FindResolverRuleAssociationByID(ctx, conn, d.Id()) + ruleAssociation, err := findResolverRuleAssociationByID(ctx, conn, d.Id()) if !d.IsNewResource() && tfresource.NotFound(err) { log.Printf("[WARN] Route53 Resolver Rule Association (%s) not found, removing from state", d.Id()) @@ -114,15 +116,15 @@ func resourceRuleAssociationRead(ctx context.Context, d *schema.ResourceData, me func resourceRuleAssociationDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).Route53ResolverConn(ctx) + conn := meta.(*conns.AWSClient).Route53ResolverClient(ctx) log.Printf("[DEBUG] Deleting Route53 Resolver Rule Association: %s", d.Id()) - _, err := conn.DisassociateResolverRuleWithContext(ctx, &route53resolver.DisassociateResolverRuleInput{ + _, err := conn.DisassociateResolverRule(ctx, &route53resolver.DisassociateResolverRuleInput{ ResolverRuleId: aws.String(d.Get("resolver_rule_id").(string)), VPCId: aws.String(d.Get(names.AttrVPCID).(string)), }) - if tfawserr.ErrCodeEquals(err, route53resolver.ErrCodeResourceNotFoundException) { + if errs.IsA[*awstypes.ResourceNotFoundException](err) { return diags } @@ -137,14 +139,14 @@ func resourceRuleAssociationDelete(ctx context.Context, d *schema.ResourceData, return diags } -func FindResolverRuleAssociationByID(ctx context.Context, conn *route53resolver.Route53Resolver, id string) (*route53resolver.ResolverRuleAssociation, error) { +func findResolverRuleAssociationByID(ctx context.Context, conn *route53resolver.Client, id string) (*awstypes.ResolverRuleAssociation, error) { input := &route53resolver.GetResolverRuleAssociationInput{ ResolverRuleAssociationId: aws.String(id), } - output, err := conn.GetResolverRuleAssociationWithContext(ctx, input) + output, err := conn.GetResolverRuleAssociation(ctx, input) - if tfawserr.ErrCodeEquals(err, route53resolver.ErrCodeResourceNotFoundException) { + if errs.IsA[*awstypes.ResourceNotFoundException](err) { return nil, &retry.NotFoundError{ LastError: err, LastRequest: input, @@ -162,9 +164,9 @@ func FindResolverRuleAssociationByID(ctx context.Context, conn *route53resolver. return output.ResolverRuleAssociation, nil } -func statusRuleAssociation(ctx context.Context, conn *route53resolver.Route53Resolver, id string) retry.StateRefreshFunc { +func statusRuleAssociation(ctx context.Context, conn *route53resolver.Client, id string) retry.StateRefreshFunc { return func() (interface{}, string, error) { - output, err := FindResolverRuleAssociationByID(ctx, conn, id) + output, err := findResolverRuleAssociationByID(ctx, conn, id) if tfresource.NotFound(err) { return nil, "", nil @@ -174,14 +176,14 @@ func statusRuleAssociation(ctx context.Context, conn *route53resolver.Route53Res return nil, "", err } - return output, aws.StringValue(output.Status), nil + return output, string(output.Status), nil } } -func waitRuleAssociationCreated(ctx context.Context, conn *route53resolver.Route53Resolver, id string, timeout time.Duration) (*route53resolver.ResolverRuleAssociation, error) { +func waitRuleAssociationCreated(ctx context.Context, conn *route53resolver.Client, id string, timeout time.Duration) (*awstypes.ResolverRuleAssociation, error) { stateConf := &retry.StateChangeConf{ - Pending: []string{route53resolver.ResolverRuleAssociationStatusCreating}, - Target: []string{route53resolver.ResolverRuleAssociationStatusComplete}, + Pending: enum.Slice(awstypes.ResolverRuleAssociationStatusCreating), + Target: enum.Slice(awstypes.ResolverRuleAssociationStatusComplete), Refresh: statusRuleAssociation(ctx, conn, id), Timeout: timeout, Delay: 10 * time.Second, @@ -190,8 +192,8 @@ func waitRuleAssociationCreated(ctx context.Context, conn *route53resolver.Route outputRaw, err := stateConf.WaitForStateContext(ctx) - if output, ok := outputRaw.(*route53resolver.ResolverRuleAssociation); ok { - tfresource.SetLastError(err, errors.New(aws.StringValue(output.StatusMessage))) + if output, ok := outputRaw.(*awstypes.ResolverRuleAssociation); ok { + tfresource.SetLastError(err, errors.New(aws.ToString(output.StatusMessage))) return output, err } @@ -199,9 +201,9 @@ func waitRuleAssociationCreated(ctx context.Context, conn *route53resolver.Route return nil, err } -func waitRuleAssociationDeleted(ctx context.Context, conn *route53resolver.Route53Resolver, id string, timeout time.Duration) (*route53resolver.ResolverRuleAssociation, error) { +func waitRuleAssociationDeleted(ctx context.Context, conn *route53resolver.Client, id string, timeout time.Duration) (*awstypes.ResolverRuleAssociation, error) { stateConf := &retry.StateChangeConf{ - Pending: []string{route53resolver.ResolverRuleAssociationStatusDeleting}, + Pending: enum.Slice(awstypes.ResolverRuleAssociationStatusDeleting), Target: []string{}, Refresh: statusRuleAssociation(ctx, conn, id), Timeout: timeout, @@ -211,8 +213,8 @@ func waitRuleAssociationDeleted(ctx context.Context, conn *route53resolver.Route outputRaw, err := stateConf.WaitForStateContext(ctx) - if output, ok := outputRaw.(*route53resolver.ResolverRuleAssociation); ok { - tfresource.SetLastError(err, errors.New(aws.StringValue(output.StatusMessage))) + if output, ok := outputRaw.(*awstypes.ResolverRuleAssociation); ok { + tfresource.SetLastError(err, errors.New(aws.ToString(output.StatusMessage))) return output, err } diff --git a/internal/service/route53resolver/rule_association_test.go b/internal/service/route53resolver/rule_association_test.go index a939e7bdd3d4..e059d820ed07 100644 --- a/internal/service/route53resolver/rule_association_test.go +++ b/internal/service/route53resolver/rule_association_test.go @@ -8,7 +8,7 @@ import ( "fmt" "testing" - "github.com/aws/aws-sdk-go/service/route53resolver" + awstypes "github.com/aws/aws-sdk-go-v2/service/route53resolver/types" sdkacctest "github.com/hashicorp/terraform-plugin-testing/helper/acctest" "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/hashicorp/terraform-plugin-testing/terraform" @@ -22,7 +22,7 @@ import ( func TestAccRoute53ResolverRuleAssociation_basic(t *testing.T) { ctx := acctest.Context(t) - var assn route53resolver.ResolverRuleAssociation + var assn awstypes.ResolverRuleAssociation resourceName := "aws_route53_resolver_rule_association.test" vpcResourceName := "aws_vpc.test" ruleResourceName := "aws_route53_resolver_rule.test" @@ -55,7 +55,7 @@ func TestAccRoute53ResolverRuleAssociation_basic(t *testing.T) { func TestAccRoute53ResolverRuleAssociation_disappears(t *testing.T) { ctx := acctest.Context(t) - var assn route53resolver.ResolverRuleAssociation + var assn awstypes.ResolverRuleAssociation resourceName := "aws_route53_resolver_rule_association.test" rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) domainName := acctest.RandomDomainName() @@ -80,7 +80,7 @@ func TestAccRoute53ResolverRuleAssociation_disappears(t *testing.T) { func TestAccRoute53ResolverRuleAssociation_Disappears_vpc(t *testing.T) { ctx := acctest.Context(t) - var assn route53resolver.ResolverRuleAssociation + var assn awstypes.ResolverRuleAssociation resourceName := "aws_route53_resolver_rule_association.test" vpcResourceName := "aws_vpc.test" rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) @@ -106,7 +106,7 @@ func TestAccRoute53ResolverRuleAssociation_Disappears_vpc(t *testing.T) { func testAccCheckRuleAssociationDestroy(ctx context.Context) resource.TestCheckFunc { return func(s *terraform.State) error { - conn := acctest.Provider.Meta().(*conns.AWSClient).Route53ResolverConn(ctx) + conn := acctest.Provider.Meta().(*conns.AWSClient).Route53ResolverClient(ctx) for _, rs := range s.RootModule().Resources { if rs.Type != "aws_route53_resolver_rule_association" { @@ -130,7 +130,7 @@ func testAccCheckRuleAssociationDestroy(ctx context.Context) resource.TestCheckF } } -func testAccCheckRuleAssociationExists(ctx context.Context, n string, v *route53resolver.ResolverRuleAssociation) resource.TestCheckFunc { +func testAccCheckRuleAssociationExists(ctx context.Context, n string, v *awstypes.ResolverRuleAssociation) resource.TestCheckFunc { return func(s *terraform.State) error { rs, ok := s.RootModule().Resources[n] if !ok { @@ -141,7 +141,7 @@ func testAccCheckRuleAssociationExists(ctx context.Context, n string, v *route53 return fmt.Errorf("No Route53 Resolver Rule Association ID is set") } - conn := acctest.Provider.Meta().(*conns.AWSClient).Route53ResolverConn(ctx) + conn := acctest.Provider.Meta().(*conns.AWSClient).Route53ResolverClient(ctx) output, err := tfroute53resolver.FindResolverRuleAssociationByID(ctx, conn, rs.Primary.ID) From c226454951a0dc88a1f28e51dfc7b75c3e30c19d Mon Sep 17 00:00:00 2001 From: Daniel Rieske Date: Sat, 10 Aug 2024 00:23:55 +0200 Subject: [PATCH 17/32] feat: migrated r/rule to sdkv2 --- internal/service/route53resolver/rule.go | 119 +++++++++--------- internal/service/route53resolver/rule_test.go | 36 +++--- 2 files changed, 78 insertions(+), 77 deletions(-) diff --git a/internal/service/route53resolver/rule.go b/internal/service/route53resolver/rule.go index 1038e11d05d2..809eb78e6d12 100644 --- a/internal/service/route53resolver/rule.go +++ b/internal/service/route53resolver/rule.go @@ -10,9 +10,9 @@ import ( "strings" "time" - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/service/route53resolver" - "github.com/hashicorp/aws-sdk-go-base/v2/awsv1shim/v2/tfawserr" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/route53resolver" + awstypes "github.com/aws/aws-sdk-go-v2/service/route53resolver/types" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/customdiff" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/id" @@ -20,6 +20,8 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/hashicorp/terraform-provider-aws/internal/conns" + "github.com/hashicorp/terraform-provider-aws/internal/enum" + "github.com/hashicorp/terraform-provider-aws/internal/errs" "github.com/hashicorp/terraform-provider-aws/internal/errs/sdkdiag" tftags "github.com/hashicorp/terraform-provider-aws/internal/tags" "github.com/hashicorp/terraform-provider-aws/internal/tfresource" @@ -29,7 +31,7 @@ import ( // @SDKResource("aws_route53_resolver_rule", name="Rule") // @Tags(identifierAttribute="arn") -func ResourceRule() *schema.Resource { +func resourceRule() *schema.Resource { return &schema.Resource{ CreateWithoutTimeout: resourceRuleCreate, ReadWithoutTimeout: resourceRuleRead, @@ -72,10 +74,10 @@ func ResourceRule() *schema.Resource { Optional: true, }, "rule_type": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - ValidateFunc: validation.StringInSlice(route53resolver.RuleTypeOption_Values(), false), + Type: schema.TypeString, + Required: true, + ForceNew: true, + ValidateDiagFunc: enum.Validate[awstypes.RuleTypeOption](), }, "share_status": { Type: schema.TypeString, @@ -100,10 +102,10 @@ func ResourceRule() *schema.Resource { ValidateFunc: validation.IntBetween(1, 65535), }, names.AttrProtocol: { - Type: schema.TypeString, - Optional: true, - Default: route53resolver.ProtocolDo53, - ValidateFunc: validation.StringInSlice(route53resolver.Protocol_Values(), false), + Type: schema.TypeString, + Optional: true, + Default: awstypes.ProtocolDo53, + ValidateDiagFunc: enum.Validate[awstypes.Protocol](), }, }, }, @@ -119,12 +121,12 @@ func ResourceRule() *schema.Resource { func resourceRuleCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).Route53ResolverConn(ctx) + conn := meta.(*conns.AWSClient).Route53ResolverClient(ctx) input := &route53resolver.CreateResolverRuleInput{ CreatorRequestId: aws.String(id.PrefixedUniqueId("tf-r53-resolver-rule-")), DomainName: aws.String(d.Get(names.AttrDomainName).(string)), - RuleType: aws.String(d.Get("rule_type").(string)), + RuleType: awstypes.RuleTypeOption(d.Get("rule_type").(string)), Tags: getTagsIn(ctx), } @@ -140,13 +142,13 @@ func resourceRuleCreate(ctx context.Context, d *schema.ResourceData, meta interf input.TargetIps = expandRuleTargetIPs(v.(*schema.Set)) } - output, err := conn.CreateResolverRuleWithContext(ctx, input) + output, err := conn.CreateResolverRule(ctx, input) if err != nil { return sdkdiag.AppendErrorf(diags, "creating Route53 Resolver Rule: %s", err) } - d.SetId(aws.StringValue(output.ResolverRule.Id)) + d.SetId(aws.ToString(output.ResolverRule.Id)) if _, err := waitRuleCreated(ctx, conn, d.Id(), d.Timeout(schema.TimeoutCreate)); err != nil { return sdkdiag.AppendErrorf(diags, "waiting for Route53 Resolver Rule (%s) create: %s", d.Id(), err) @@ -157,9 +159,9 @@ func resourceRuleCreate(ctx context.Context, d *schema.ResourceData, meta interf func resourceRuleRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).Route53ResolverConn(ctx) + conn := meta.(*conns.AWSClient).Route53ResolverClient(ctx) - rule, err := FindResolverRuleByID(ctx, conn, d.Id()) + rule, err := findResolverRuleByID(ctx, conn, d.Id()) if !d.IsNewResource() && tfresource.NotFound(err) { log.Printf("[WARN] Route53 Resolver Rule (%s) not found, removing from state", d.Id()) @@ -171,11 +173,10 @@ func resourceRuleRead(ctx context.Context, d *schema.ResourceData, meta interfac return sdkdiag.AppendErrorf(diags, "reading Route53 Resolver Rule (%s): %s", d.Id(), err) } - arn := aws.StringValue(rule.Arn) - d.Set(names.AttrARN, arn) + d.Set(names.AttrARN, aws.ToString(rule.Arn)) // To be consistent with other AWS services that do not accept a trailing period, // we remove the suffix from the Domain Name returned from the API - d.Set(names.AttrDomainName, trimTrailingPeriod(aws.StringValue(rule.DomainName))) + d.Set(names.AttrDomainName, trimTrailingPeriod(aws.ToString(rule.DomainName))) d.Set(names.AttrName, rule.Name) d.Set(names.AttrOwnerID, rule.OwnerId) d.Set("resolver_endpoint_id", rule.ResolverEndpointId) @@ -190,11 +191,11 @@ func resourceRuleRead(ctx context.Context, d *schema.ResourceData, meta interfac func resourceRuleUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).Route53ResolverConn(ctx) + conn := meta.(*conns.AWSClient).Route53ResolverClient(ctx) if d.HasChanges(names.AttrName, "resolver_endpoint_id", "target_ip") { input := &route53resolver.UpdateResolverRuleInput{ - Config: &route53resolver.ResolverRuleConfig{}, + Config: &awstypes.ResolverRuleConfig{}, ResolverRuleId: aws.String(d.Id()), } @@ -210,7 +211,7 @@ func resourceRuleUpdate(ctx context.Context, d *schema.ResourceData, meta interf input.Config.TargetIps = expandRuleTargetIPs(v.(*schema.Set)) } - _, err := conn.UpdateResolverRuleWithContext(ctx, input) + _, err := conn.UpdateResolverRule(ctx, input) if err != nil { return sdkdiag.AppendErrorf(diags, "updating Route53 Resolver Rule (%s): %s", d.Id(), err) @@ -226,14 +227,14 @@ func resourceRuleUpdate(ctx context.Context, d *schema.ResourceData, meta interf func resourceRuleDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).Route53ResolverConn(ctx) + conn := meta.(*conns.AWSClient).Route53ResolverClient(ctx) log.Printf("[DEBUG] Deleting Route53 Resolver Rule: %s", d.Id()) - _, err := conn.DeleteResolverRuleWithContext(ctx, &route53resolver.DeleteResolverRuleInput{ + _, err := conn.DeleteResolverRule(ctx, &route53resolver.DeleteResolverRuleInput{ ResolverRuleId: aws.String(d.Id()), }) - if tfawserr.ErrCodeEquals(err, route53resolver.ErrCodeResourceNotFoundException) { + if errs.IsA[*awstypes.ResourceNotFoundException](err) { return diags } @@ -262,14 +263,14 @@ func resourceRuleCustomizeDiff(_ context.Context, diff *schema.ResourceDiff, v i return nil } -func FindResolverRuleByID(ctx context.Context, conn *route53resolver.Route53Resolver, id string) (*route53resolver.ResolverRule, error) { +func findResolverRuleByID(ctx context.Context, conn *route53resolver.Client, id string) (*awstypes.ResolverRule, error) { input := &route53resolver.GetResolverRuleInput{ ResolverRuleId: aws.String(id), } - output, err := conn.GetResolverRuleWithContext(ctx, input) + output, err := conn.GetResolverRule(ctx, input) - if tfawserr.ErrCodeEquals(err, route53resolver.ErrCodeResourceNotFoundException) { + if errs.IsA[*awstypes.ResourceNotFoundException](err) { return nil, &retry.NotFoundError{ LastError: err, LastRequest: input, @@ -287,9 +288,9 @@ func FindResolverRuleByID(ctx context.Context, conn *route53resolver.Route53Reso return output.ResolverRule, nil } -func statusRule(ctx context.Context, conn *route53resolver.Route53Resolver, id string) retry.StateRefreshFunc { +func statusRule(ctx context.Context, conn *route53resolver.Client, id string) retry.StateRefreshFunc { return func() (interface{}, string, error) { - output, err := FindResolverRuleByID(ctx, conn, id) + output, err := findResolverRuleByID(ctx, conn, id) if tfresource.NotFound(err) { return nil, "", nil @@ -299,22 +300,22 @@ func statusRule(ctx context.Context, conn *route53resolver.Route53Resolver, id s return nil, "", err } - return output, aws.StringValue(output.Status), nil + return output, string(output.Status), nil } } -func waitRuleCreated(ctx context.Context, conn *route53resolver.Route53Resolver, id string, timeout time.Duration) (*route53resolver.ResolverRule, error) { +func waitRuleCreated(ctx context.Context, conn *route53resolver.Client, id string, timeout time.Duration) (*awstypes.ResolverRule, error) { stateConf := &retry.StateChangeConf{ - Target: []string{route53resolver.ResolverRuleStatusComplete}, + Target: enum.Slice(awstypes.ResolverRuleStatusComplete), Refresh: statusRule(ctx, conn, id), Timeout: timeout, } outputRaw, err := stateConf.WaitForStateContext(ctx) - if output, ok := outputRaw.(*route53resolver.ResolverRule); ok { - if status := aws.StringValue(output.Status); status == route53resolver.ResolverRuleStatusFailed { - tfresource.SetLastError(err, errors.New(aws.StringValue(output.StatusMessage))) + if output, ok := outputRaw.(*awstypes.ResolverRule); ok { + if output.Status == awstypes.ResolverRuleStatusFailed { + tfresource.SetLastError(err, errors.New(aws.ToString(output.StatusMessage))) } return output, err @@ -323,19 +324,19 @@ func waitRuleCreated(ctx context.Context, conn *route53resolver.Route53Resolver, return nil, err } -func waitRuleUpdated(ctx context.Context, conn *route53resolver.Route53Resolver, id string, timeout time.Duration) (*route53resolver.ResolverRule, error) { +func waitRuleUpdated(ctx context.Context, conn *route53resolver.Client, id string, timeout time.Duration) (*awstypes.ResolverRule, error) { stateConf := &retry.StateChangeConf{ - Pending: []string{route53resolver.ResolverRuleStatusUpdating}, - Target: []string{route53resolver.ResolverRuleStatusComplete}, + Pending: enum.Slice(awstypes.ResolverRuleStatusUpdating), + Target: enum.Slice(awstypes.ResolverRuleStatusComplete), Refresh: statusRule(ctx, conn, id), Timeout: timeout, } outputRaw, err := stateConf.WaitForStateContext(ctx) - if output, ok := outputRaw.(*route53resolver.ResolverRule); ok { - if status := aws.StringValue(output.Status); status == route53resolver.ResolverRuleStatusFailed { - tfresource.SetLastError(err, errors.New(aws.StringValue(output.StatusMessage))) + if output, ok := outputRaw.(*awstypes.ResolverRule); ok { + if output.Status == awstypes.ResolverRuleStatusFailed { + tfresource.SetLastError(err, errors.New(aws.ToString(output.StatusMessage))) } return output, err @@ -344,9 +345,9 @@ func waitRuleUpdated(ctx context.Context, conn *route53resolver.Route53Resolver, return nil, err } -func waitRuleDeleted(ctx context.Context, conn *route53resolver.Route53Resolver, id string, timeout time.Duration) (*route53resolver.ResolverRule, error) { +func waitRuleDeleted(ctx context.Context, conn *route53resolver.Client, id string, timeout time.Duration) (*awstypes.ResolverRule, error) { stateConf := &retry.StateChangeConf{ - Pending: []string{route53resolver.ResolverRuleStatusDeleting}, + Pending: enum.Slice(awstypes.ResolverRuleStatusDeleting), Target: []string{}, Refresh: statusRule(ctx, conn, id), Timeout: timeout, @@ -354,9 +355,9 @@ func waitRuleDeleted(ctx context.Context, conn *route53resolver.Route53Resolver, outputRaw, err := stateConf.WaitForStateContext(ctx) - if output, ok := outputRaw.(*route53resolver.ResolverRule); ok { - if status := aws.StringValue(output.Status); status == route53resolver.ResolverRuleStatusFailed { - tfresource.SetLastError(err, errors.New(aws.StringValue(output.StatusMessage))) + if output, ok := outputRaw.(*awstypes.ResolverRule); ok { + if output.Status == awstypes.ResolverRuleStatusFailed { + tfresource.SetLastError(err, errors.New(aws.ToString(output.StatusMessage))) } return output, err @@ -365,11 +366,11 @@ func waitRuleDeleted(ctx context.Context, conn *route53resolver.Route53Resolver, return nil, err } -func expandRuleTargetIPs(vTargetIps *schema.Set) []*route53resolver.TargetAddress { - targetAddresses := []*route53resolver.TargetAddress{} +func expandRuleTargetIPs(vTargetIps *schema.Set) []awstypes.TargetAddress { + targetAddresses := []awstypes.TargetAddress{} for _, vTargetIp := range vTargetIps.List() { - targetAddress := &route53resolver.TargetAddress{} + targetAddress := awstypes.TargetAddress{} mTargetIp := vTargetIp.(map[string]interface{}) @@ -377,10 +378,10 @@ func expandRuleTargetIPs(vTargetIps *schema.Set) []*route53resolver.TargetAddres targetAddress.Ip = aws.String(vIp) } if vPort, ok := mTargetIp[names.AttrPort].(int); ok { - targetAddress.Port = aws.Int64(int64(vPort)) + targetAddress.Port = aws.Int32(int32(vPort)) } if vProtocol, ok := mTargetIp[names.AttrProtocol].(string); ok && vProtocol != "" { - targetAddress.Protocol = aws.String(vProtocol) + targetAddress.Protocol = awstypes.Protocol(vProtocol) } targetAddresses = append(targetAddresses, targetAddress) @@ -389,7 +390,7 @@ func expandRuleTargetIPs(vTargetIps *schema.Set) []*route53resolver.TargetAddres return targetAddresses } -func flattenRuleTargetIPs(targetAddresses []*route53resolver.TargetAddress) []interface{} { +func flattenRuleTargetIPs(targetAddresses []awstypes.TargetAddress) []interface{} { if targetAddresses == nil { return []interface{}{} } @@ -398,9 +399,9 @@ func flattenRuleTargetIPs(targetAddresses []*route53resolver.TargetAddress) []in for _, targetAddress := range targetAddresses { mTargetIp := map[string]interface{}{ - "ip": aws.StringValue(targetAddress.Ip), - names.AttrPort: int(aws.Int64Value(targetAddress.Port)), - names.AttrProtocol: aws.StringValue(targetAddress.Protocol), + "ip": aws.ToString(targetAddress.Ip), + names.AttrPort: int(aws.ToInt32(targetAddress.Port)), + names.AttrProtocol: targetAddress.Protocol, } vTargetIps = append(vTargetIps, mTargetIp) @@ -417,7 +418,7 @@ func trimTrailingPeriod(v interface{}) string { var str string switch value := v.(type) { case *string: - str = aws.StringValue(value) + str = aws.ToString(value) case string: str = value default: diff --git a/internal/service/route53resolver/rule_test.go b/internal/service/route53resolver/rule_test.go index ff917cc84fe4..77b2e3b0e374 100644 --- a/internal/service/route53resolver/rule_test.go +++ b/internal/service/route53resolver/rule_test.go @@ -8,8 +8,8 @@ import ( "fmt" "testing" - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/service/route53resolver" + "github.com/aws/aws-sdk-go-v2/aws" + awstypes "github.com/aws/aws-sdk-go-v2/service/route53resolver/types" sdkacctest "github.com/hashicorp/terraform-plugin-testing/helper/acctest" "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/hashicorp/terraform-plugin-testing/terraform" @@ -22,7 +22,7 @@ import ( func TestAccRoute53ResolverRule_basic(t *testing.T) { ctx := acctest.Context(t) - var rule route53resolver.ResolverRule + var rule awstypes.ResolverRule domainName := acctest.RandomDomainName() resourceName := "aws_route53_resolver_rule.test" @@ -58,7 +58,7 @@ func TestAccRoute53ResolverRule_basic(t *testing.T) { func TestAccRoute53ResolverRule_disappears(t *testing.T) { ctx := acctest.Context(t) - var rule route53resolver.ResolverRule + var rule awstypes.ResolverRule domainName := acctest.RandomDomainName() resourceName := "aws_route53_resolver_rule.test" @@ -82,7 +82,7 @@ func TestAccRoute53ResolverRule_disappears(t *testing.T) { func TestAccRoute53ResolverRule_tags(t *testing.T) { ctx := acctest.Context(t) - var rule route53resolver.ResolverRule + var rule awstypes.ResolverRule domainName := acctest.RandomDomainName() resourceName := "aws_route53_resolver_rule.test" @@ -128,7 +128,7 @@ func TestAccRoute53ResolverRule_tags(t *testing.T) { func TestAccRoute53ResolverRule_justDotDomainName(t *testing.T) { ctx := acctest.Context(t) - var rule route53resolver.ResolverRule + var rule awstypes.ResolverRule resourceName := "aws_route53_resolver_rule.test" resource.ParallelTest(t, resource.TestCase{ @@ -159,7 +159,7 @@ func TestAccRoute53ResolverRule_justDotDomainName(t *testing.T) { func TestAccRoute53ResolverRule_trailingDotDomainName(t *testing.T) { ctx := acctest.Context(t) - var rule route53resolver.ResolverRule + var rule awstypes.ResolverRule resourceName := "aws_route53_resolver_rule.test" resource.ParallelTest(t, resource.TestCase{ @@ -190,7 +190,7 @@ func TestAccRoute53ResolverRule_trailingDotDomainName(t *testing.T) { func TestAccRoute53ResolverRule_updateName(t *testing.T) { ctx := acctest.Context(t) - var rule1, rule2 route53resolver.ResolverRule + var rule1, rule2 awstypes.ResolverRule resourceName := "aws_route53_resolver_rule.test" domainName := acctest.RandomDomainName() rName1 := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) @@ -228,7 +228,7 @@ func TestAccRoute53ResolverRule_updateName(t *testing.T) { func TestAccRoute53ResolverRule_forward(t *testing.T) { ctx := acctest.Context(t) - var rule1, rule2, rule3 route53resolver.ResolverRule + var rule1, rule2, rule3 awstypes.ResolverRule resourceName := "aws_route53_resolver_rule.test" ep1ResourceName := "aws_route53_resolver_endpoint.test.0" ep2ResourceName := "aws_route53_resolver_endpoint.test.1" @@ -307,7 +307,7 @@ func TestAccRoute53ResolverRule_forward(t *testing.T) { func TestAccRoute53ResolverRule_forwardMultiProtocol(t *testing.T) { ctx := acctest.Context(t) - var rule route53resolver.ResolverRule + var rule awstypes.ResolverRule resourceName := "aws_route53_resolver_rule.test" epResourceName := "aws_route53_resolver_endpoint.test.0" domainName := acctest.RandomDomainName() @@ -378,7 +378,7 @@ func TestAccRoute53ResolverRule_forwardMultiProtocol(t *testing.T) { func TestAccRoute53ResolverRule_forwardEndpointRecreate(t *testing.T) { ctx := acctest.Context(t) - var rule1, rule2 route53resolver.ResolverRule + var rule1, rule2 awstypes.ResolverRule resourceName := "aws_route53_resolver_rule.test" epResourceName := "aws_route53_resolver_endpoint.test.0" domainName := acctest.RandomDomainName() @@ -425,9 +425,9 @@ func TestAccRoute53ResolverRule_forwardEndpointRecreate(t *testing.T) { }) } -func testAccCheckRulesSame(before, after *route53resolver.ResolverRule) resource.TestCheckFunc { +func testAccCheckRulesSame(before, after *awstypes.ResolverRule) resource.TestCheckFunc { return func(s *terraform.State) error { - if before, after := aws.StringValue(before.Arn), aws.StringValue(after.Arn); before != after { + if before, after := aws.ToString(before.Arn), aws.ToString(after.Arn); before != after { return fmt.Errorf("Expected Route53 Resolver Rule ARNs to be the same. But they were: %s, %s", before, after) } @@ -435,9 +435,9 @@ func testAccCheckRulesSame(before, after *route53resolver.ResolverRule) resource } } -func testAccCheckRulesDifferent(before, after *route53resolver.ResolverRule) resource.TestCheckFunc { +func testAccCheckRulesDifferent(before, after *awstypes.ResolverRule) resource.TestCheckFunc { return func(s *terraform.State) error { - if before, after := aws.StringValue(before.Arn), aws.StringValue(after.Arn); before == after { + if before, after := aws.ToString(before.Arn), aws.ToString(after.Arn); before == after { return fmt.Errorf("Expected Route53 Resolver rule ARNs to be different. But they were both: %s", before) } @@ -447,7 +447,7 @@ func testAccCheckRulesDifferent(before, after *route53resolver.ResolverRule) res func testAccCheckRuleDestroy(ctx context.Context) resource.TestCheckFunc { return func(s *terraform.State) error { - conn := acctest.Provider.Meta().(*conns.AWSClient).Route53ResolverConn(ctx) + conn := acctest.Provider.Meta().(*conns.AWSClient).Route53ResolverClient(ctx) for _, rs := range s.RootModule().Resources { if rs.Type != "aws_route53_resolver_rule" { @@ -470,7 +470,7 @@ func testAccCheckRuleDestroy(ctx context.Context) resource.TestCheckFunc { } } -func testAccCheckRuleExists(ctx context.Context, n string, v *route53resolver.ResolverRule) resource.TestCheckFunc { +func testAccCheckRuleExists(ctx context.Context, n string, v *awstypes.ResolverRule) resource.TestCheckFunc { return func(s *terraform.State) error { rs, ok := s.RootModule().Resources[n] if !ok { @@ -481,7 +481,7 @@ func testAccCheckRuleExists(ctx context.Context, n string, v *route53resolver.Re return fmt.Errorf("No Route53 Resolver Rule ID is set") } - conn := acctest.Provider.Meta().(*conns.AWSClient).Route53ResolverConn(ctx) + conn := acctest.Provider.Meta().(*conns.AWSClient).Route53ResolverClient(ctx) output, err := tfroute53resolver.FindResolverRuleByID(ctx, conn, rs.Primary.ID) From 549687e73eed435a4e2759851b288905d5410437 Mon Sep 17 00:00:00 2001 From: Daniel Rieske Date: Sat, 10 Aug 2024 00:24:09 +0200 Subject: [PATCH 18/32] feat: migrated d/query_log_config to sdkv2 --- .../query_log_config_data_source.go | 42 +++++++++---------- 1 file changed, 20 insertions(+), 22 deletions(-) diff --git a/internal/service/route53resolver/query_log_config_data_source.go b/internal/service/route53resolver/query_log_config_data_source.go index e22f6e1805d7..735bf92c8b8e 100644 --- a/internal/service/route53resolver/query_log_config_data_source.go +++ b/internal/service/route53resolver/query_log_config_data_source.go @@ -7,21 +7,22 @@ import ( "context" "errors" - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/service/route53resolver" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/route53resolver" + awstypes "github.com/aws/aws-sdk-go-v2/service/route53resolver/types" "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" "github.com/hashicorp/terraform-provider-aws/internal/create" "github.com/hashicorp/terraform-provider-aws/internal/errs/sdkdiag" "github.com/hashicorp/terraform-provider-aws/internal/namevaluesfilters" - namevaluesfiltersv1 "github.com/hashicorp/terraform-provider-aws/internal/namevaluesfilters/v1" + namevaluesfiltersv2 "github.com/hashicorp/terraform-provider-aws/internal/namevaluesfilters/v2" tftags "github.com/hashicorp/terraform-provider-aws/internal/tags" "github.com/hashicorp/terraform-provider-aws/names" ) -// @SDKDataSource("aws_route53_resolver_query_log_config") -func DataSourceQueryLogConfig() *schema.Resource { +// @SDKDataSource("aws_route53_resolver_query_log_config", name="Query Log Config") +func dataSourceQueryLogConfig() *schema.Resource { return &schema.Resource{ ReadWithoutTimeout: dataSourceQueryLogConfigRead, @@ -63,38 +64,35 @@ const ( func dataSourceQueryLogConfigRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).Route53ResolverConn(ctx) + conn := meta.(*conns.AWSClient).Route53ResolverClient(ctx) configID := d.Get("resolver_query_log_config_id").(string) input := &route53resolver.ListResolverQueryLogConfigsInput{} if v, ok := d.GetOk(names.AttrFilter); ok && v.(*schema.Set).Len() > 0 { - input.Filters = namevaluesfiltersv1.New(v.(*schema.Set)).Route53ResolverFilters() + input.Filters = namevaluesfiltersv2.New(v.(*schema.Set)).Route53ResolverFilters() } - var configs []*route53resolver.ResolverQueryLogConfig + var configs []awstypes.ResolverQueryLogConfig - err := conn.ListResolverQueryLogConfigsPagesWithContext(ctx, input, func(page *route53resolver.ListResolverQueryLogConfigsOutput, lastPage bool) bool { - if page == nil { - return !lastPage + pages := route53resolver.NewListResolverQueryLogConfigsPaginator(conn, input) + for pages.HasMorePages() { + page, err := pages.NextPage(ctx) + + if err != nil { + return sdkdiag.AppendErrorf(diags, "listing Route53 resolver Query Logging Configurations: %s", err) } for _, v := range page.ResolverQueryLogConfigs { if configID != "" { - if aws.StringValue(v.Id) == configID { + if aws.ToString(v.Id) == configID { configs = append(configs, v) } } else { configs = append(configs, v) } } - - return !lastPage - }) - - if err != nil { - return sdkdiag.AppendErrorf(diags, "listing Route53 resolver Query Logging Configurations: %s", err) } if n := len(configs); n == 0 { @@ -107,18 +105,18 @@ func dataSourceQueryLogConfigRead(ctx context.Context, d *schema.ResourceData, m config := configs[0] - d.SetId(aws.StringValue(config.Id)) - arn := aws.StringValue(config.Arn) + d.SetId(aws.ToString(config.Id)) + arn := aws.ToString(config.Arn) d.Set(names.AttrARN, arn) d.Set(names.AttrDestinationARN, config.DestinationArn) d.Set(names.AttrName, config.Name) d.Set(names.AttrOwnerID, config.OwnerId) d.Set("resolver_query_log_config_id", config.Id) - shareStatus := aws.StringValue(config.ShareStatus) + shareStatus := awstypes.ShareStatus(config.ShareStatus) d.Set("share_status", shareStatus) - if shareStatus != route53resolver.ShareStatusSharedWithMe { + if shareStatus != awstypes.ShareStatusSharedWithMe { tags, err := listTags(ctx, conn, arn) if err != nil { From 435801b9edab4e414b5ce6ec50887177ffc43e1a Mon Sep 17 00:00:00 2001 From: Daniel Rieske Date: Sat, 10 Aug 2024 00:24:21 +0200 Subject: [PATCH 19/32] feat: migrated d/firewall_rules to sdkv2 --- .../firewall_rules_data_source.go | 58 ++++++++----------- 1 file changed, 23 insertions(+), 35 deletions(-) diff --git a/internal/service/route53resolver/firewall_rules_data_source.go b/internal/service/route53resolver/firewall_rules_data_source.go index 5b73e9d7fc92..7a53426d7059 100644 --- a/internal/service/route53resolver/firewall_rules_data_source.go +++ b/internal/service/route53resolver/firewall_rules_data_source.go @@ -6,8 +6,8 @@ package route53resolver import ( "context" - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/service/route53resolver" + "github.com/aws/aws-sdk-go-v2/aws" + awstypes "github.com/aws/aws-sdk-go-v2/service/route53resolver/types" "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" @@ -15,8 +15,8 @@ import ( "github.com/hashicorp/terraform-provider-aws/names" ) -// @SDKDataSource("aws_route53_resolver_firewall_rules") -func DataSourceResolverFirewallRules() *schema.Resource { +// @SDKDataSource("aws_route53_resolver_firewall_rules", name="Firewall Rules") +func dataSourceResolverFirewallRules() *schema.Resource { return &schema.Resource{ ReadWithoutTimeout: dataSourceResolverFirewallFirewallRulesRead, @@ -95,15 +95,15 @@ func DataSourceResolverFirewallRules() *schema.Resource { func dataSourceResolverFirewallFirewallRulesRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).Route53ResolverConn(ctx) + conn := meta.(*conns.AWSClient).Route53ResolverClient(ctx) firewallRuleGroupID := d.Get("firewall_rule_group_id").(string) - rules, err := findFirewallRules(ctx, conn, firewallRuleGroupID, func(rule *route53resolver.FirewallRule) bool { - if v, ok := d.GetOk(names.AttrAction); ok && aws.StringValue(rule.Action) != v.(string) { + rules, err := findFirewallRules(ctx, conn, firewallRuleGroupID, func(rule awstypes.FirewallRule) bool { + if v, ok := d.GetOk(names.AttrAction); ok && string(rule.Action) != v.(string) { return false } - if v, ok := d.GetOk(names.AttrPriority); ok && aws.Int64Value(rule.Priority) != int64(v.(int)) { + if v, ok := d.GetOk(names.AttrPriority); ok && aws.ToInt32(rule.Priority) != int32(v.(int)) { return false } @@ -129,7 +129,7 @@ func dataSourceResolverFirewallFirewallRulesRead(ctx context.Context, d *schema. return diags } -func flattenFirewallRules(apiObjects []*route53resolver.FirewallRule) []interface{} { +func flattenFirewallRules(apiObjects []awstypes.FirewallRule) []interface{} { if len(apiObjects) == 0 { return nil } @@ -137,57 +137,45 @@ func flattenFirewallRules(apiObjects []*route53resolver.FirewallRule) []interfac var tfList []interface{} for _, apiObject := range apiObjects { - if apiObject == nil { - continue - } tfList = append(tfList, flattenFirewallRule(apiObject)) } return tfList } -func flattenFirewallRule(apiObject *route53resolver.FirewallRule) map[string]interface{} { - if apiObject == nil { - return nil +func flattenFirewallRule(apiObject awstypes.FirewallRule) map[string]interface{} { + tfMap := map[string]interface{}{ + names.AttrAction: apiObject.Action, + "block_override_dns_type": apiObject.BlockOverrideDnsType, + "block_response": apiObject.BlockResponse, } - tfMap := map[string]interface{}{} - - if apiObject.Action != nil { - tfMap[names.AttrAction] = aws.StringValue(apiObject.Action) - } - if apiObject.BlockOverrideDnsType != nil { - tfMap["block_override_dns_type"] = aws.StringValue(apiObject.BlockOverrideDnsType) - } if apiObject.BlockOverrideDomain != nil { - tfMap["block_override_domain"] = aws.StringValue(apiObject.BlockOverrideDomain) + tfMap["block_override_domain"] = aws.ToString(apiObject.BlockOverrideDomain) } if apiObject.BlockOverrideTtl != nil { - tfMap["block_override_ttl"] = aws.Int64Value(apiObject.BlockOverrideTtl) - } - if apiObject.BlockResponse != nil { - tfMap["block_response"] = aws.StringValue(apiObject.BlockResponse) + tfMap["block_override_ttl"] = aws.ToInt32(apiObject.BlockOverrideTtl) } if apiObject.CreationTime != nil { - tfMap[names.AttrCreationTime] = aws.StringValue(apiObject.CreationTime) + tfMap[names.AttrCreationTime] = aws.ToString(apiObject.CreationTime) } if apiObject.CreatorRequestId != nil { - tfMap["creator_request_id"] = aws.StringValue(apiObject.CreatorRequestId) + tfMap["creator_request_id"] = aws.ToString(apiObject.CreatorRequestId) } if apiObject.FirewallDomainListId != nil { - tfMap["firewall_domain_list_id"] = aws.StringValue(apiObject.FirewallDomainListId) + tfMap["firewall_domain_list_id"] = aws.ToString(apiObject.FirewallDomainListId) } if apiObject.FirewallRuleGroupId != nil { - tfMap["firewall_rule_group_id"] = aws.StringValue(apiObject.FirewallRuleGroupId) + tfMap["firewall_rule_group_id"] = aws.ToString(apiObject.FirewallRuleGroupId) } if apiObject.ModificationTime != nil { - tfMap["modification_time"] = aws.StringValue(apiObject.ModificationTime) + tfMap["modification_time"] = aws.ToString(apiObject.ModificationTime) } if apiObject.Name != nil { - tfMap[names.AttrName] = aws.StringValue(apiObject.Name) + tfMap[names.AttrName] = aws.ToString(apiObject.Name) } if apiObject.Priority != nil { - tfMap[names.AttrPriority] = aws.Int64Value(apiObject.Priority) + tfMap[names.AttrPriority] = aws.ToInt32(apiObject.Priority) } return tfMap } From dffc34194c4c3cbf77330e13e3e56e40d1e780b4 Mon Sep 17 00:00:00 2001 From: Daniel Rieske Date: Sat, 10 Aug 2024 00:24:47 +0200 Subject: [PATCH 20/32] feat: regenerate namevaluesfilters --- .../generate/namevaluesfilters/v1/main.go | 1 - .../generate/namevaluesfilters/v2/main.go | 1 + .../v1/service_filters_gen.go | 23 ------------------- .../v2/service_filters_gen.go | 23 +++++++++++++++++++ 4 files changed, 24 insertions(+), 24 deletions(-) diff --git a/internal/generate/namevaluesfilters/v1/main.go b/internal/generate/namevaluesfilters/v1/main.go index 88f2a12033bd..95bf178f7a51 100644 --- a/internal/generate/namevaluesfilters/v1/main.go +++ b/internal/generate/namevaluesfilters/v1/main.go @@ -32,7 +32,6 @@ func main() { sliceServiceNames := []string{ "imagebuilder", "rds", - "route53resolver", } // Always sort to reduce any potential generation churn sort.Strings(sliceServiceNames) diff --git a/internal/generate/namevaluesfilters/v2/main.go b/internal/generate/namevaluesfilters/v2/main.go index bb0eadba1310..ad590a093d7b 100644 --- a/internal/generate/namevaluesfilters/v2/main.go +++ b/internal/generate/namevaluesfilters/v2/main.go @@ -32,6 +32,7 @@ func main() { sliceServiceNames := []string{ "rds", "secretsmanager", + "route53resolver", } // Always sort to reduce any potential generation churn sort.Strings(sliceServiceNames) diff --git a/internal/namevaluesfilters/v1/service_filters_gen.go b/internal/namevaluesfilters/v1/service_filters_gen.go index bab79ede734a..35b01eebd053 100644 --- a/internal/namevaluesfilters/v1/service_filters_gen.go +++ b/internal/namevaluesfilters/v1/service_filters_gen.go @@ -6,7 +6,6 @@ import ( // nosemgrep:ci.semgrep.aws.multiple-service-imports "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/service/imagebuilder" "github.com/aws/aws-sdk-go/service/rds" - "github.com/aws/aws-sdk-go/service/route53resolver" ) // []*SERVICE.Filter handling @@ -54,25 +53,3 @@ func (filters NameValuesFilters) RDSFilters() []*rds.Filter { return result } - -// Route53ResolverFilters returns route53resolver service filters. -func (filters NameValuesFilters) Route53ResolverFilters() []*route53resolver.Filter { - m := filters.Map() - - if len(m) == 0 { - return nil - } - - result := make([]*route53resolver.Filter, 0, len(m)) - - for k, v := range m { - filter := &route53resolver.Filter{ - Name: aws.String(k), - Values: aws.StringSlice(v), - } - - result = append(result, filter) - } - - return result -} diff --git a/internal/namevaluesfilters/v2/service_filters_gen.go b/internal/namevaluesfilters/v2/service_filters_gen.go index afbe17801a30..2183bdf6fe97 100644 --- a/internal/namevaluesfilters/v2/service_filters_gen.go +++ b/internal/namevaluesfilters/v2/service_filters_gen.go @@ -5,6 +5,7 @@ package v2 import ( // nosemgrep:ci.semgrep.aws.multiple-service-imports "github.com/aws/aws-sdk-go-v2/aws" rdstypes "github.com/aws/aws-sdk-go-v2/service/rds/types" + route53resolvertypes "github.com/aws/aws-sdk-go-v2/service/route53resolver/types" secretsmanagertypes "github.com/aws/aws-sdk-go-v2/service/secretsmanager/types" ) @@ -32,6 +33,28 @@ func (filters NameValuesFilters) RDSFilters() []rdstypes.Filter { return result } +// Route53ResolverFilters returns route53resolver service filters. +func (filters NameValuesFilters) Route53ResolverFilters() []route53resolvertypes.Filter { + m := filters.Map() + + if len(m) == 0 { + return nil + } + + result := make([]route53resolvertypes.Filter, 0, len(m)) + + for k, v := range m { + filter := route53resolvertypes.Filter{ + Name: aws.String(k), + Values: v, + } + + result = append(result, filter) + } + + return result +} + // SecretsManagerFilters returns secretsmanager service filters. func (filters NameValuesFilters) SecretsManagerFilters() []secretsmanagertypes.Filter { m := filters.Map() From 00ba1a95a4d5190cd368be12ffbc2af464634601 Mon Sep 17 00:00:00 2001 From: Daniel Rieske Date: Sat, 10 Aug 2024 00:25:06 +0200 Subject: [PATCH 21/32] feat: migrate d/rule to sdkv2 --- .../route53resolver/rule_data_source.go | 63 ++++++++++--------- 1 file changed, 34 insertions(+), 29 deletions(-) diff --git a/internal/service/route53resolver/rule_data_source.go b/internal/service/route53resolver/rule_data_source.go index 5ea54388eafb..ee212581c9d1 100644 --- a/internal/service/route53resolver/rule_data_source.go +++ b/internal/service/route53resolver/rule_data_source.go @@ -6,19 +6,21 @@ package route53resolver import ( "context" - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/service/route53resolver" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/route53resolver" + awstypes "github.com/aws/aws-sdk-go-v2/service/route53resolver/types" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/hashicorp/terraform-provider-aws/internal/conns" + "github.com/hashicorp/terraform-provider-aws/internal/enum" "github.com/hashicorp/terraform-provider-aws/internal/errs/sdkdiag" tftags "github.com/hashicorp/terraform-provider-aws/internal/tags" "github.com/hashicorp/terraform-provider-aws/names" ) -// @SDKDataSource("aws_route53_resolver_rule") -func DataSourceRule() *schema.Resource { +// @SDKDataSource("aws_route53_resolver_rule", name="Rule") +func dataSourceRule() *schema.Resource { return &schema.Resource{ ReadWithoutTimeout: dataSourceRuleRead, @@ -58,11 +60,11 @@ func DataSourceRule() *schema.Resource { ConflictsWith: []string{names.AttrDomainName, names.AttrName, "resolver_endpoint_id", "rule_type"}, }, "rule_type": { - Type: schema.TypeString, - Optional: true, - Computed: true, - ValidateFunc: validation.StringInSlice(route53resolver.RuleTypeOption_Values(), false), - ConflictsWith: []string{"resolver_rule_id"}, + Type: schema.TypeString, + Optional: true, + Computed: true, + ValidateDiagFunc: enum.Validate[awstypes.RuleTypeOption](), + ConflictsWith: []string{"resolver_rule_id"}, }, "share_status": { Type: schema.TypeString, @@ -75,14 +77,14 @@ func DataSourceRule() *schema.Resource { func dataSourceRuleRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).Route53ResolverConn(ctx) + conn := meta.(*conns.AWSClient).Route53ResolverClient(ctx) ignoreTagsConfig := meta.(*conns.AWSClient).IgnoreTagsConfig var err error - var rule *route53resolver.ResolverRule + var rule *awstypes.ResolverRule if v, ok := d.GetOk("resolver_rule_id"); ok { id := v.(string) - rule, err = FindResolverRuleByID(ctx, conn, id) + rule, err = findResolverRuleByID(ctx, conn, id) if err != nil { return sdkdiag.AppendErrorf(diags, "reading Route53 Resolver Rule (%s): %s", id, err) @@ -97,14 +99,17 @@ func dataSourceRuleRead(ctx context.Context, d *schema.ResourceData, meta interf }), } - var rules []*route53resolver.ResolverRule - err = conn.ListResolverRulesPagesWithContext(ctx, input, func(page *route53resolver.ListResolverRulesOutput, lastPage bool) bool { - rules = append(rules, page.ResolverRules...) - return !lastPage - }) + var rules []awstypes.ResolverRule - if err != nil { - return sdkdiag.AppendErrorf(diags, "listing Route53 Resolver Rules: %s", err) + pages := route53resolver.NewListResolverRulesPaginator(conn, input) + for pages.HasMorePages() { + page, err := pages.NextPage(ctx) + + if err != nil { + return sdkdiag.AppendErrorf(diags, "listing Route53 Resolver Rules: %s", err) + } + + rules = append(rules, page.ResolverRules...) } if n := len(rules); n == 0 { @@ -113,24 +118,24 @@ func dataSourceRuleRead(ctx context.Context, d *schema.ResourceData, meta interf return sdkdiag.AppendErrorf(diags, "%d Route53 Resolver Rules matched; use additional constraints to reduce matches to a single Rule", n) } - rule = rules[0] + rule = &rules[0] } - d.SetId(aws.StringValue(rule.Id)) - arn := aws.StringValue(rule.Arn) + d.SetId(aws.ToString(rule.Id)) + arn := aws.ToString(rule.Arn) d.Set(names.AttrARN, arn) // To be consistent with other AWS services that do not accept a trailing period, // we remove the suffix from the Domain Name returned from the API - d.Set(names.AttrDomainName, trimTrailingPeriod(aws.StringValue(rule.DomainName))) + d.Set(names.AttrDomainName, trimTrailingPeriod(aws.ToString(rule.DomainName))) d.Set(names.AttrName, rule.Name) d.Set(names.AttrOwnerID, rule.OwnerId) d.Set("resolver_endpoint_id", rule.ResolverEndpointId) d.Set("resolver_rule_id", rule.Id) d.Set("rule_type", rule.RuleType) - shareStatus := aws.StringValue(rule.ShareStatus) + shareStatus := awstypes.ShareStatus(rule.ShareStatus) d.Set("share_status", shareStatus) // https://github.com/hashicorp/terraform-provider-aws/issues/10211 - if shareStatus != route53resolver.ShareStatusSharedWithMe { + if shareStatus != awstypes.ShareStatusSharedWithMe { tags, err := listTags(ctx, conn, arn) if err != nil { @@ -145,17 +150,17 @@ func dataSourceRuleRead(ctx context.Context, d *schema.ResourceData, meta interf return diags } -func buildAttributeFilterList(attrs map[string]string) []*route53resolver.Filter { - filters := []*route53resolver.Filter{} +func buildAttributeFilterList(attrs map[string]string) []awstypes.Filter { + filters := []awstypes.Filter{} for k, v := range attrs { if v == "" { continue } - filters = append(filters, &route53resolver.Filter{ + filters = append(filters, awstypes.Filter{ Name: aws.String(k), - Values: aws.StringSlice([]string{v}), + Values: []string{v}, }) } From 9bad262ece26b9aee147a2adddb99ab1cfbb40c6 Mon Sep 17 00:00:00 2001 From: Daniel Rieske Date: Sat, 10 Aug 2024 00:25:13 +0200 Subject: [PATCH 22/32] feat: migrate d/rules to sdkv2 --- .../route53resolver/rules_data_source.go | 51 ++++++++++--------- 1 file changed, 27 insertions(+), 24 deletions(-) diff --git a/internal/service/route53resolver/rules_data_source.go b/internal/service/route53resolver/rules_data_source.go index 735e9d214dc2..8c318ebf8d30 100644 --- a/internal/service/route53resolver/rules_data_source.go +++ b/internal/service/route53resolver/rules_data_source.go @@ -7,19 +7,21 @@ import ( "context" "github.com/YakDriver/regexache" - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/service/route53resolver" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/route53resolver" + awstypes "github.com/aws/aws-sdk-go-v2/service/route53resolver/types" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/hashicorp/terraform-provider-aws/internal/conns" + "github.com/hashicorp/terraform-provider-aws/internal/enum" "github.com/hashicorp/terraform-provider-aws/internal/errs/sdkdiag" "github.com/hashicorp/terraform-provider-aws/internal/verify" "github.com/hashicorp/terraform-provider-aws/names" ) -// @SDKDataSource("aws_route53_resolver_rules") -func DataSourceRules() *schema.Resource { +// @SDKDataSource("aws_route53_resolver_rules", name="Rules") +func dataSourceRules() *schema.Resource { return &schema.Resource{ ReadWithoutTimeout: dataSourceRulesRead, @@ -48,14 +50,14 @@ func DataSourceRules() *schema.Resource { Elem: &schema.Schema{Type: schema.TypeString}, }, "rule_type": { - Type: schema.TypeString, - Optional: true, - ValidateFunc: validation.StringInSlice(route53resolver.RuleTypeOption_Values(), false), + Type: schema.TypeString, + Optional: true, + ValidateDiagFunc: enum.Validate[awstypes.RuleTypeOption](), }, "share_status": { - Type: schema.TypeString, - Optional: true, - ValidateFunc: validation.StringInSlice(route53resolver.ShareStatus_Values(), false), + Type: schema.TypeString, + Optional: true, + ValidateDiagFunc: enum.Validate[awstypes.ShareStatus](), }, }, } @@ -63,42 +65,43 @@ func DataSourceRules() *schema.Resource { func dataSourceRulesRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).Route53ResolverConn(ctx) + conn := meta.(*conns.AWSClient).Route53ResolverClient(ctx) input := &route53resolver.ListResolverRulesInput{} var ruleIDs []*string - err := conn.ListResolverRulesPagesWithContext(ctx, input, func(page *route53resolver.ListResolverRulesOutput, lastPage bool) bool { + pages := route53resolver.NewListResolverRulesPaginator(conn, input) + for pages.HasMorePages() { + page, err := pages.NextPage(ctx) + + if err != nil { + return sdkdiag.AppendErrorf(diags, "listing Route53 Resolver Rules: %s", err) + } + for _, rule := range page.ResolverRules { - if v, ok := d.GetOk("name_regex"); ok && !regexache.MustCompile(v.(string)).MatchString(aws.StringValue(rule.Name)) { + if v, ok := d.GetOk("name_regex"); ok && !regexache.MustCompile(v.(string)).MatchString(aws.ToString(rule.Name)) { continue } - if v, ok := d.GetOk(names.AttrOwnerID); ok && aws.StringValue(rule.OwnerId) != v.(string) { + if v, ok := d.GetOk(names.AttrOwnerID); ok && aws.ToString(rule.OwnerId) != v.(string) { continue } - if v, ok := d.GetOk("resolver_endpoint_id"); ok && aws.StringValue(rule.ResolverEndpointId) != v.(string) { + if v, ok := d.GetOk("resolver_endpoint_id"); ok && aws.ToString(rule.ResolverEndpointId) != v.(string) { continue } - if v, ok := d.GetOk("rule_type"); ok && aws.StringValue(rule.RuleType) != v.(string) { + if v, ok := d.GetOk("rule_type"); ok && string(rule.RuleType) != v.(string) { continue } - if v, ok := d.GetOk("share_status"); ok && aws.StringValue(rule.ShareStatus) != v.(string) { + if v, ok := d.GetOk("share_status"); ok && string(rule.ShareStatus) != v.(string) { continue } ruleIDs = append(ruleIDs, rule.Id) } - - return !lastPage - }) - - if err != nil { - return sdkdiag.AppendErrorf(diags, "listing Route53 Resolver Rules: %s", err) } d.SetId(meta.(*conns.AWSClient).Region) - d.Set("resolver_rule_ids", aws.StringValueSlice(ruleIDs)) + d.Set("resolver_rule_ids", aws.ToStringSlice(ruleIDs)) return diags } From cde1684123f468341487bc2f6192e17fe586f7b9 Mon Sep 17 00:00:00 2001 From: Daniel Rieske Date: Sat, 10 Aug 2024 00:25:27 +0200 Subject: [PATCH 23/32] feat: migrate sweepers to sdkv2 --- internal/service/route53resolver/sweep.go | 379 ++++++++++------------ 1 file changed, 172 insertions(+), 207 deletions(-) diff --git a/internal/service/route53resolver/sweep.go b/internal/service/route53resolver/sweep.go index 68d90cb41eb1..0a657f7de2f8 100644 --- a/internal/service/route53resolver/sweep.go +++ b/internal/service/route53resolver/sweep.go @@ -7,12 +7,13 @@ import ( "fmt" "log" - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/service/route53resolver" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/route53resolver" + awstypes "github.com/aws/aws-sdk-go-v2/service/route53resolver/types" multierror "github.com/hashicorp/go-multierror" "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/hashicorp/terraform-provider-aws/internal/sweep" - "github.com/hashicorp/terraform-provider-aws/internal/sweep/awsv1" + "github.com/hashicorp/terraform-provider-aws/internal/sweep/awsv2" "github.com/hashicorp/terraform-provider-aws/names" ) @@ -98,34 +99,31 @@ func sweepDNSSECConfig(region string) error { if err != nil { return fmt.Errorf("error getting client: %s", err) } - conn := client.Route53ResolverConn(ctx) + conn := client.Route53ResolverClient(ctx) input := &route53resolver.ListResolverDnssecConfigsInput{} sweepResources := make([]sweep.Sweepable, 0) - err = conn.ListResolverDnssecConfigsPagesWithContext(ctx, input, func(page *route53resolver.ListResolverDnssecConfigsOutput, lastPage bool) bool { - if page == nil { - return !lastPage + pages := route53resolver.NewListResolverDnssecConfigsPaginator(conn, input) + for pages.HasMorePages() { + page, err := pages.NextPage(ctx) + + if awsv2.SkipSweepError(err) { + log.Printf("[WARN] Skipping Route53 Resolver DNSSEC Config sweep for %s: %s", region, err) + return nil + } + + if err != nil { + return fmt.Errorf("error listing Route53 Resolver DNSSEC Configs (%s): %w", region, err) } for _, v := range page.ResolverDnssecConfigs { - r := ResourceDNSSECConfig() + r := resourceDNSSECConfig() d := r.Data(nil) - d.SetId(aws.StringValue(v.Id)) + d.SetId(aws.ToString(v.Id)) d.Set(names.AttrResourceID, v.ResourceId) sweepResources = append(sweepResources, sweep.NewSweepResource(r, d, client)) } - - return !lastPage - }) - - if awsv1.SkipSweepError(err) { - log.Printf("[WARN] Skipping Route53 Resolver DNSSEC Config sweep for %s: %s", region, err) - return nil - } - - if err != nil { - return fmt.Errorf("error listing Route53 Resolver DNSSEC Configs (%s): %w", region, err) } err = sweep.SweepOrchestrator(ctx, sweepResources) @@ -143,33 +141,30 @@ func sweepEndpoints(region string) error { if err != nil { return fmt.Errorf("error getting client: %s", err) } - conn := client.Route53ResolverConn(ctx) + conn := client.Route53ResolverClient(ctx) input := &route53resolver.ListResolverEndpointsInput{} sweepResources := make([]sweep.Sweepable, 0) - err = conn.ListResolverEndpointsPagesWithContext(ctx, input, func(page *route53resolver.ListResolverEndpointsOutput, lastPage bool) bool { - if page == nil { - return !lastPage + pages := route53resolver.NewListResolverEndpointsPaginator(conn, input) + for pages.HasMorePages() { + page, err := pages.NextPage(ctx) + + if awsv2.SkipSweepError(err) { + log.Printf("[WARN] Skipping Route53 Resolver Endpoint sweep for %s: %s", region, err) + return nil + } + + if err != nil { + return fmt.Errorf("error listing Route53 Resolver Endpoints (%s): %w", region, err) } for _, v := range page.ResolverEndpoints { - r := ResourceEndpoint() + r := resourceEndpoint() d := r.Data(nil) - d.SetId(aws.StringValue(v.Id)) + d.SetId(aws.ToString(v.Id)) sweepResources = append(sweepResources, sweep.NewSweepResource(r, d, client)) } - - return !lastPage - }) - - if awsv1.SkipSweepError(err) { - log.Printf("[WARN] Skipping Route53 Resolver Endpoint sweep for %s: %s", region, err) - return nil - } - - if err != nil { - return fmt.Errorf("error listing Route53 Resolver Endpoints (%s): %w", region, err) } err = sweep.SweepOrchestrator(ctx, sweepResources) @@ -187,34 +182,31 @@ func sweepFirewallConfigs(region string) error { if err != nil { return fmt.Errorf("error getting client: %s", err) } - conn := client.Route53ResolverConn(ctx) + conn := client.Route53ResolverClient(ctx) input := &route53resolver.ListFirewallConfigsInput{} sweepResources := make([]sweep.Sweepable, 0) - err = conn.ListFirewallConfigsPagesWithContext(ctx, input, func(page *route53resolver.ListFirewallConfigsOutput, lastPage bool) bool { - if page == nil { - return !lastPage + pages := route53resolver.NewListFirewallConfigsPaginator(conn, input) + for pages.HasMorePages() { + page, err := pages.NextPage(ctx) + + if awsv2.SkipSweepError(err) { + log.Printf("[WARN] Skipping Route53 Resolver Firewall Config sweep for %s: %s", region, err) + return nil + } + + if err != nil { + return fmt.Errorf("error listing Route53 Resolver Firewall Configs (%s): %w", region, err) } for _, v := range page.FirewallConfigs { - r := ResourceFirewallConfig() + r := resourceFirewallConfig() d := r.Data(nil) - d.SetId(aws.StringValue(v.Id)) + d.SetId(aws.ToString(v.Id)) d.Set(names.AttrResourceID, v.ResourceId) sweepResources = append(sweepResources, sweep.NewSweepResource(r, d, client)) } - - return !lastPage - }) - - if awsv1.SkipSweepError(err) { - log.Printf("[WARN] Skipping Route53 Resolver Firewall Config sweep for %s: %s", region, err) - return nil - } - - if err != nil { - return fmt.Errorf("error listing Route53 Resolver Firewall Configs (%s): %w", region, err) } err = sweep.SweepOrchestrator(ctx, sweepResources) @@ -232,33 +224,30 @@ func sweepFirewallDomainLists(region string) error { if err != nil { return fmt.Errorf("error getting client: %s", err) } - conn := client.Route53ResolverConn(ctx) + conn := client.Route53ResolverClient(ctx) input := &route53resolver.ListFirewallDomainListsInput{} sweepResources := make([]sweep.Sweepable, 0) - err = conn.ListFirewallDomainListsPagesWithContext(ctx, input, func(page *route53resolver.ListFirewallDomainListsOutput, lastPage bool) bool { - if page == nil { - return !lastPage + pages := route53resolver.NewListFirewallDomainListsPaginator(conn, input) + for pages.HasMorePages() { + page, err := pages.NextPage(ctx) + + if awsv2.SkipSweepError(err) { + log.Printf("[WARN] Skipping Route53 Resolver Firewall Domain List sweep for %s: %s", region, err) + return nil + } + + if err != nil { + return fmt.Errorf("error listing Route53 Resolver Firewall Domain Lists (%s): %w", region, err) } for _, v := range page.FirewallDomainLists { - r := ResourceFirewallDomainList() + r := resourceFirewallDomainList() d := r.Data(nil) - d.SetId(aws.StringValue(v.Id)) + d.SetId(aws.ToString(v.Id)) sweepResources = append(sweepResources, sweep.NewSweepResource(r, d, client)) } - - return !lastPage - }) - - if awsv1.SkipSweepError(err) { - log.Printf("[WARN] Skipping Route53 Resolver Firewall Domain List sweep for %s: %s", region, err) - return nil - } - - if err != nil { - return fmt.Errorf("error listing Route53 Resolver Firewall Domain Lists (%s): %w", region, err) } err = sweep.SweepOrchestrator(ctx, sweepResources) @@ -276,33 +265,30 @@ func sweepFirewallRuleGroupAssociations(region string) error { if err != nil { return fmt.Errorf("error getting client: %s", err) } - conn := client.Route53ResolverConn(ctx) + conn := client.Route53ResolverClient(ctx) input := &route53resolver.ListFirewallRuleGroupAssociationsInput{} sweepResources := make([]sweep.Sweepable, 0) - err = conn.ListFirewallRuleGroupAssociationsPagesWithContext(ctx, input, func(page *route53resolver.ListFirewallRuleGroupAssociationsOutput, lastPage bool) bool { - if page == nil { - return !lastPage + pages := route53resolver.NewListFirewallRuleGroupAssociationsPaginator(conn, input) + for pages.HasMorePages() { + page, err := pages.NextPage(ctx) + + if awsv2.SkipSweepError(err) { + log.Printf("[WARN] Skipping Route53 Resolver Firewall Rule Group Association sweep for %s: %s", region, err) + return nil + } + + if err != nil { + return fmt.Errorf("error listing Route53 Resolver Firewall Rule Group Associations (%s): %w", region, err) } for _, v := range page.FirewallRuleGroupAssociations { - r := ResourceFirewallRuleGroupAssociation() + r := resourceFirewallRuleGroupAssociation() d := r.Data(nil) - d.SetId(aws.StringValue(v.Id)) + d.SetId(aws.ToString(v.Id)) sweepResources = append(sweepResources, sweep.NewSweepResource(r, d, client)) } - - return !lastPage - }) - - if awsv1.SkipSweepError(err) { - log.Printf("[WARN] Skipping Route53 Resolver Firewall Rule Group Association sweep for %s: %s", region, err) - return nil - } - - if err != nil { - return fmt.Errorf("error listing Route53 Resolver Firewall Rule Group Associations (%s): %w", region, err) } err = sweep.SweepOrchestrator(ctx, sweepResources) @@ -320,40 +306,37 @@ func sweepFirewallRuleGroups(region string) error { if err != nil { return fmt.Errorf("error getting client: %s", err) } - conn := client.Route53ResolverConn(ctx) + conn := client.Route53ResolverClient(ctx) input := &route53resolver.ListFirewallRuleGroupsInput{} sweepResources := make([]sweep.Sweepable, 0) - err = conn.ListFirewallRuleGroupsPagesWithContext(ctx, input, func(page *route53resolver.ListFirewallRuleGroupsOutput, lastPage bool) bool { - if page == nil { - return !lastPage + pages := route53resolver.NewListFirewallRuleGroupsPaginator(conn, input) + for pages.HasMorePages() { + page, err := pages.NextPage(ctx) + + if awsv2.SkipSweepError(err) { + log.Printf("[WARN] Skipping Route53 Resolver Firewall Rule Group sweep for %s: %s", region, err) + return nil + } + + if err != nil { + return fmt.Errorf("error listing Route53 Resolver Firewall Rule Groups (%s): %w", region, err) } for _, v := range page.FirewallRuleGroups { - id := aws.StringValue(v.Id) + id := aws.ToString(v.Id) - if shareStatus := aws.StringValue(v.ShareStatus); shareStatus == route53resolver.ShareStatusSharedWithMe { + if shareStatus := v.ShareStatus; shareStatus == awstypes.ShareStatusSharedWithMe { log.Printf("[INFO] Skipping Route53 Resolver Firewall Rule Group %s: ShareStatus=%s", id, shareStatus) continue } - r := ResourceFirewallRuleGroup() + r := resourceFirewallRuleGroup() d := r.Data(nil) d.SetId(id) sweepResources = append(sweepResources, sweep.NewSweepResource(r, d, client)) } - - return !lastPage - }) - - if awsv1.SkipSweepError(err) { - log.Printf("[WARN] Skipping Route53 Resolver Firewall Rule Group sweep for %s: %s", region, err) - return nil - } - - if err != nil { - return fmt.Errorf("error listing Route53 Resolver Firewall Rule Groups (%s): %w", region, err) } err = sweep.SweepOrchestrator(ctx, sweepResources) @@ -371,20 +354,28 @@ func sweepFirewallRules(region string) error { if err != nil { return fmt.Errorf("error getting client: %s", err) } - conn := client.Route53ResolverConn(ctx) + conn := client.Route53ResolverClient(ctx) input := &route53resolver.ListFirewallRuleGroupsInput{} var sweeperErrs *multierror.Error sweepResources := make([]sweep.Sweepable, 0) - err = conn.ListFirewallRuleGroupsPagesWithContext(ctx, input, func(page *route53resolver.ListFirewallRuleGroupsOutput, lastPage bool) bool { - if page == nil { - return !lastPage + pages := route53resolver.NewListFirewallRuleGroupsPaginator(conn, input) + for pages.HasMorePages() { + page, err := pages.NextPage(ctx) + + if awsv2.SkipSweepError(err) { + log.Print(fmt.Errorf("[WARN] Skipping Route53 Resolver Firewall Rule sweep for %s: %w", region, err)) + return sweeperErrs.ErrorOrNil() + } + + if err != nil { + sweeperErrs = multierror.Append(sweeperErrs, fmt.Errorf("error listing Route53 Resolver Firewall Rule Groups (%s): %w", region, err)) } for _, v := range page.FirewallRuleGroups { - id := aws.StringValue(v.Id) + id := aws.ToString(v.Id) - if shareStatus := aws.StringValue(v.ShareStatus); shareStatus == route53resolver.ShareStatusSharedWithMe { + if shareStatus := v.ShareStatus; shareStatus == awstypes.ShareStatusSharedWithMe { log.Printf("[INFO] Skipping Route53 Resolver Firewall Rule Group %s: ShareStatus=%s", id, shareStatus) continue } @@ -393,41 +384,27 @@ func sweepFirewallRules(region string) error { FirewallRuleGroupId: aws.String(id), } - err := conn.ListFirewallRulesPagesWithContext(ctx, input, func(page *route53resolver.ListFirewallRulesOutput, lastPage bool) bool { - if page == nil { - return !lastPage + pages := route53resolver.NewListFirewallRulesPaginator(conn, input) + for pages.HasMorePages() { + page, err := pages.NextPage(ctx) + + if awsv2.SkipSweepError(err) { + continue + } + + if err != nil { + sweeperErrs = multierror.Append(sweeperErrs, fmt.Errorf("error listing Route53 Resolver Firewall Rules (%s): %w", region, err)) } for _, v := range page.FirewallRules { - r := ResourceFirewallRule() + r := resourceFirewallRule() d := r.Data(nil) - d.SetId(FirewallRuleCreateResourceID(aws.StringValue(v.FirewallRuleGroupId), aws.StringValue(v.FirewallDomainListId))) + d.SetId(firewallRuleCreateResourceID(aws.ToString(v.FirewallRuleGroupId), aws.ToString(v.FirewallDomainListId))) sweepResources = append(sweepResources, sweep.NewSweepResource(r, d, client)) } - - return !lastPage - }) - - if awsv1.SkipSweepError(err) { - continue - } - - if err != nil { - sweeperErrs = multierror.Append(sweeperErrs, fmt.Errorf("error listing Route53 Resolver Firewall Rules (%s): %w", region, err)) } } - - return !lastPage - }) - - if awsv1.SkipSweepError(err) { - log.Print(fmt.Errorf("[WARN] Skipping Route53 Resolver Firewall Rule sweep for %s: %w", region, err)) - return sweeperErrs.ErrorOrNil() - } - - if err != nil { - sweeperErrs = multierror.Append(sweeperErrs, fmt.Errorf("error listing Route53 Resolver Firewall Rule Groups (%s): %w", region, err)) } err = sweep.SweepOrchestrator(ctx, sweepResources) @@ -445,35 +422,32 @@ func sweepQueryLogConfigAssociations(region string) error { if err != nil { return fmt.Errorf("error getting client: %s", err) } - conn := client.Route53ResolverConn(ctx) + conn := client.Route53ResolverClient(ctx) input := &route53resolver.ListResolverQueryLogConfigAssociationsInput{} sweepResources := make([]sweep.Sweepable, 0) - err = conn.ListResolverQueryLogConfigAssociationsPagesWithContext(ctx, input, func(page *route53resolver.ListResolverQueryLogConfigAssociationsOutput, lastPage bool) bool { - if page == nil { - return !lastPage + pages := route53resolver.NewListResolverQueryLogConfigAssociationsPaginator(conn, input) + for pages.HasMorePages() { + page, err := pages.NextPage(ctx) + + if awsv2.SkipSweepError(err) { + log.Printf("[WARN] Skipping Route53 Resolver Query Log Config Association sweep for %s: %s", region, err) + return nil + } + + if err != nil { + return fmt.Errorf("error listing Route53 Resolver Query Log Config Associations (%s): %w", region, err) } for _, v := range page.ResolverQueryLogConfigAssociations { - r := ResourceQueryLogConfigAssociation() + r := resourceQueryLogConfigAssociation() d := r.Data(nil) - d.SetId(aws.StringValue(v.Id)) + d.SetId(aws.ToString(v.Id)) d.Set("resolver_query_log_config_id", v.ResolverQueryLogConfigId) d.Set(names.AttrResourceID, v.ResourceId) sweepResources = append(sweepResources, sweep.NewSweepResource(r, d, client)) } - - return !lastPage - }) - - if awsv1.SkipSweepError(err) { - log.Printf("[WARN] Skipping Route53 Resolver Query Log Config Association sweep for %s: %s", region, err) - return nil - } - - if err != nil { - return fmt.Errorf("error listing Route53 Resolver Query Log Config Associations (%s): %w", region, err) } err = sweep.SweepOrchestrator(ctx, sweepResources) @@ -491,33 +465,30 @@ func sweepQueryLogsConfig(region string) error { if err != nil { return fmt.Errorf("error getting client: %s", err) } - conn := client.Route53ResolverConn(ctx) + conn := client.Route53ResolverClient(ctx) input := &route53resolver.ListResolverQueryLogConfigsInput{} sweepResources := make([]sweep.Sweepable, 0) - err = conn.ListResolverQueryLogConfigsPagesWithContext(ctx, input, func(page *route53resolver.ListResolverQueryLogConfigsOutput, lastPage bool) bool { - if page == nil { - return !lastPage + pages := route53resolver.NewListResolverQueryLogConfigsPaginator(conn, input) + for pages.HasMorePages() { + page, err := pages.NextPage(ctx) + + if awsv2.SkipSweepError(err) { + log.Printf("[WARN] Skipping Route53 Resolver Query Log Config sweep for %s: %s", region, err) + return nil + } + + if err != nil { + return fmt.Errorf("error listing Route53 Resolver Query Log Configs (%s): %w", region, err) } for _, v := range page.ResolverQueryLogConfigs { - r := ResourceQueryLogConfig() + r := resourceQueryLogConfig() d := r.Data(nil) - d.SetId(aws.StringValue(v.Id)) + d.SetId(aws.ToString(v.Id)) sweepResources = append(sweepResources, sweep.NewSweepResource(r, d, client)) } - - return !lastPage - }) - - if awsv1.SkipSweepError(err) { - log.Printf("[WARN] Skipping Route53 Resolver Query Log Config sweep for %s: %s", region, err) - return nil - } - - if err != nil { - return fmt.Errorf("error listing Route53 Resolver Query Log Configs (%s): %w", region, err) } err = sweep.SweepOrchestrator(ctx, sweepResources) @@ -535,35 +506,32 @@ func sweepRuleAssociations(region string) error { if err != nil { return fmt.Errorf("error getting client: %s", err) } - conn := client.Route53ResolverConn(ctx) + conn := client.Route53ResolverClient(ctx) input := &route53resolver.ListResolverRuleAssociationsInput{} sweepResources := make([]sweep.Sweepable, 0) - err = conn.ListResolverRuleAssociationsPagesWithContext(ctx, input, func(page *route53resolver.ListResolverRuleAssociationsOutput, lastPage bool) bool { - if page == nil { - return !lastPage + pages := route53resolver.NewListResolverRuleAssociationsPaginator(conn, input) + for pages.HasMorePages() { + page, err := pages.NextPage(ctx) + + if awsv2.SkipSweepError(err) { + log.Printf("[WARN] Skipping Route53 Resolver Rule Association sweep for %s: %s", region, err) + return nil + } + + if err != nil { + return fmt.Errorf("error listing Route53 Resolver Rule Associations (%s): %w", region, err) } for _, v := range page.ResolverRuleAssociations { - r := ResourceRuleAssociation() + r := resourceRuleAssociation() d := r.Data(nil) - d.SetId(aws.StringValue(v.Id)) + d.SetId(aws.ToString(v.Id)) d.Set("resolver_rule_id", v.ResolverRuleId) d.Set(names.AttrVPCID, v.VPCId) sweepResources = append(sweepResources, sweep.NewSweepResource(r, d, client)) } - - return !lastPage - }) - - if awsv1.SkipSweepError(err) { - log.Printf("[WARN] Skipping Route53 Resolver Rule Association sweep for %s: %s", region, err) - return nil - } - - if err != nil { - return fmt.Errorf("error listing Route53 Resolver Rule Associations (%s): %w", region, err) } err = sweep.SweepOrchestrator(ctx, sweepResources) @@ -581,37 +549,34 @@ func sweepRules(region string) error { if err != nil { return fmt.Errorf("error getting client: %s", err) } - conn := client.Route53ResolverConn(ctx) + conn := client.Route53ResolverClient(ctx) input := &route53resolver.ListResolverRulesInput{} sweepResources := make([]sweep.Sweepable, 0) - err = conn.ListResolverRulesPagesWithContext(ctx, input, func(page *route53resolver.ListResolverRulesOutput, lastPage bool) bool { - if page == nil { - return !lastPage + pages := route53resolver.NewListResolverRulesPaginator(conn, input) + for pages.HasMorePages() { + page, err := pages.NextPage(ctx) + + if awsv2.SkipSweepError(err) { + log.Printf("[WARN] Skipping Route53 Resolver Rule sweep for %s: %s", region, err) + return nil + } + + if err != nil { + return fmt.Errorf("error listing Route53 Resolver Rules (%s): %w", region, err) } for _, v := range page.ResolverRules { - if aws.StringValue(v.OwnerId) != client.AccountID { + if aws.ToString(v.OwnerId) != client.AccountID { continue } - r := ResourceRule() + r := resourceRule() d := r.Data(nil) - d.SetId(aws.StringValue(v.Id)) + d.SetId(aws.ToString(v.Id)) sweepResources = append(sweepResources, sweep.NewSweepResource(r, d, client)) } - - return !lastPage - }) - - if awsv1.SkipSweepError(err) { - log.Printf("[WARN] Skipping Route53 Resolver Rule sweep for %s: %s", region, err) - return nil - } - - if err != nil { - return fmt.Errorf("error listing Route53 Resolver Rules (%s): %w", region, err) } err = sweep.SweepOrchestrator(ctx, sweepResources) From 875f507e060ec9f9d83489fb9b7f9131149baca9 Mon Sep 17 00:00:00 2001 From: Daniel Rieske Date: Sat, 10 Aug 2024 00:25:55 +0200 Subject: [PATCH 24/32] feat: regenerate `v2` client --- go.mod | 1 + go.sum | 2 + internal/conns/awsclient_gen.go | 6 +- internal/service/route53resolver/generate.go | 2 +- .../service_endpoint_resolver_gen.go | 66 ++++---- .../service_endpoints_gen_test.go | 146 +++++++++++++++--- .../route53resolver/service_package_gen.go | 87 ++++++----- internal/service/route53resolver/tags_gen.go | 36 ++--- names/data/names_data.hcl | 2 +- 9 files changed, 229 insertions(+), 119 deletions(-) diff --git a/go.mod b/go.mod index 8d0d198c41b0..dd170126f8ea 100644 --- a/go.mod +++ b/go.mod @@ -294,6 +294,7 @@ require ( github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.9.16 // indirect github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.17 // indirect github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.15 // indirect + github.com/aws/aws-sdk-go-v2/service/route53resolver v1.30.3 // indirect github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.4 // indirect github.com/bgentry/speakeasy v0.1.0 // indirect github.com/boombuler/barcode v1.0.1 // indirect diff --git a/go.sum b/go.sum index e1f15de5653b..dfb1e79663c9 100644 --- a/go.sum +++ b/go.sum @@ -406,6 +406,8 @@ github.com/aws/aws-sdk-go-v2/service/route53domains v1.25.3 h1:VGLIgiClxmwxBpGzH github.com/aws/aws-sdk-go-v2/service/route53domains v1.25.3/go.mod h1:Kgq5O7ZaDk0mTZmX6YCL+ZtZ1YcJHtGsVubp0OT77MA= github.com/aws/aws-sdk-go-v2/service/route53profiles v1.2.3 h1:N4f5sliNiWcp3abC+8YpcaVjXuaNJIlz/dBd+saimm0= github.com/aws/aws-sdk-go-v2/service/route53profiles v1.2.3/go.mod h1:r2B4BvTn3zSMK+BFHGl0q63B/nJMOk9/NukLZzqO8sY= +github.com/aws/aws-sdk-go-v2/service/route53resolver v1.30.3 h1:qbQ9OMsuBvjTfSiY8S7/mxezvSRtjyqcZcoBtPN4sqo= +github.com/aws/aws-sdk-go-v2/service/route53resolver v1.30.3/go.mod h1:BQBJkxokRLgXiBgHDYichq3aNynMRSqXu26Z2Fd8bao= github.com/aws/aws-sdk-go-v2/service/rum v1.19.3 h1:DR+GYJRPL7eEZknnGdwm+lH686LmUBB/X2YVQDHLNY4= github.com/aws/aws-sdk-go-v2/service/rum v1.19.3/go.mod h1:5jFxbuc05P/+BbJvVbBspMbzDR2IFU0LegQG3iUvj8g= github.com/aws/aws-sdk-go-v2/service/s3 v1.58.3 h1:hT8ZAZRIfqBqHbzKTII+CIiY8G2oC9OpLedkZ51DWl8= diff --git a/internal/conns/awsclient_gen.go b/internal/conns/awsclient_gen.go index 95488c767ccc..90021bfeee76 100644 --- a/internal/conns/awsclient_gen.go +++ b/internal/conns/awsclient_gen.go @@ -180,6 +180,7 @@ import ( route53_sdkv2 "github.com/aws/aws-sdk-go-v2/service/route53" route53domains_sdkv2 "github.com/aws/aws-sdk-go-v2/service/route53domains" route53profiles_sdkv2 "github.com/aws/aws-sdk-go-v2/service/route53profiles" + route53resolver_sdkv2 "github.com/aws/aws-sdk-go-v2/service/route53resolver" rum_sdkv2 "github.com/aws/aws-sdk-go-v2/service/rum" s3_sdkv2 "github.com/aws/aws-sdk-go-v2/service/s3" s3control_sdkv2 "github.com/aws/aws-sdk-go-v2/service/s3control" @@ -244,7 +245,6 @@ import ( redshiftserverless_sdkv1 "github.com/aws/aws-sdk-go/service/redshiftserverless" route53recoverycontrolconfig_sdkv1 "github.com/aws/aws-sdk-go/service/route53recoverycontrolconfig" route53recoveryreadiness_sdkv1 "github.com/aws/aws-sdk-go/service/route53recoveryreadiness" - route53resolver_sdkv1 "github.com/aws/aws-sdk-go/service/route53resolver" s3outposts_sdkv1 "github.com/aws/aws-sdk-go/service/s3outposts" sagemaker_sdkv1 "github.com/aws/aws-sdk-go/service/sagemaker" simpledb_sdkv1 "github.com/aws/aws-sdk-go/service/simpledb" @@ -1045,8 +1045,8 @@ func (c *AWSClient) Route53RecoveryReadinessConn(ctx context.Context) *route53re return errs.Must(conn[*route53recoveryreadiness_sdkv1.Route53RecoveryReadiness](ctx, c, names.Route53RecoveryReadiness, make(map[string]any))) } -func (c *AWSClient) Route53ResolverConn(ctx context.Context) *route53resolver_sdkv1.Route53Resolver { - return errs.Must(conn[*route53resolver_sdkv1.Route53Resolver](ctx, c, names.Route53Resolver, make(map[string]any))) +func (c *AWSClient) Route53ResolverClient(ctx context.Context) *route53resolver_sdkv2.Client { + return errs.Must(client[*route53resolver_sdkv2.Client](ctx, c, names.Route53Resolver, make(map[string]any))) } func (c *AWSClient) S3Client(ctx context.Context) *s3_sdkv2.Client { diff --git a/internal/service/route53resolver/generate.go b/internal/service/route53resolver/generate.go index 771b1dc20b7b..ad18ca45d0a1 100644 --- a/internal/service/route53resolver/generate.go +++ b/internal/service/route53resolver/generate.go @@ -1,7 +1,7 @@ // Copyright (c) HashiCorp, Inc. // SPDX-License-Identifier: MPL-2.0 -//go:generate go run ../../generate/tags/main.go -ListTags -ServiceTagsSlice -UpdateTags +//go:generate go run ../../generate/tags/main.go -AWSSDKVersion=2 -ListTags -ServiceTagsSlice -UpdateTags //go:generate go run ../../generate/servicepackage/main.go // ONLY generate directives and package declaration! Do not add anything else to this file. diff --git a/internal/service/route53resolver/service_endpoint_resolver_gen.go b/internal/service/route53resolver/service_endpoint_resolver_gen.go index c6ac13e09fe5..493496fc66fd 100644 --- a/internal/service/route53resolver/service_endpoint_resolver_gen.go +++ b/internal/service/route53resolver/service_endpoint_resolver_gen.go @@ -6,65 +6,63 @@ import ( "context" "fmt" "net" - "net/url" - endpoints_sdkv1 "github.com/aws/aws-sdk-go/aws/endpoints" + aws_sdkv2 "github.com/aws/aws-sdk-go-v2/aws" + route53resolver_sdkv2 "github.com/aws/aws-sdk-go-v2/service/route53resolver" + smithyendpoints "github.com/aws/smithy-go/endpoints" "github.com/hashicorp/terraform-plugin-log/tflog" "github.com/hashicorp/terraform-provider-aws/internal/errs" ) -var _ endpoints_sdkv1.Resolver = resolverSDKv1{} +var _ route53resolver_sdkv2.EndpointResolverV2 = resolverSDKv2{} -type resolverSDKv1 struct { - ctx context.Context +type resolverSDKv2 struct { + defaultResolver route53resolver_sdkv2.EndpointResolverV2 } -func newEndpointResolverSDKv1(ctx context.Context) resolverSDKv1 { - return resolverSDKv1{ - ctx: ctx, +func newEndpointResolverSDKv2() resolverSDKv2 { + return resolverSDKv2{ + defaultResolver: route53resolver_sdkv2.NewDefaultEndpointResolverV2(), } } -func (r resolverSDKv1) EndpointFor(service, region string, opts ...func(*endpoints_sdkv1.Options)) (endpoint endpoints_sdkv1.ResolvedEndpoint, err error) { - ctx := r.ctx +func (r resolverSDKv2) ResolveEndpoint(ctx context.Context, params route53resolver_sdkv2.EndpointParameters) (endpoint smithyendpoints.Endpoint, err error) { + params = params.WithDefaults() + useFIPS := aws_sdkv2.ToBool(params.UseFIPS) - var opt endpoints_sdkv1.Options - opt.Set(opts...) - - useFIPS := opt.UseFIPSEndpoint == endpoints_sdkv1.FIPSEndpointStateEnabled + if eps := params.Endpoint; aws_sdkv2.ToString(eps) != "" { + tflog.Debug(ctx, "setting endpoint", map[string]any{ + "tf_aws.endpoint": endpoint, + }) - defaultResolver := endpoints_sdkv1.DefaultResolver() + if useFIPS { + tflog.Debug(ctx, "endpoint set, ignoring UseFIPSEndpoint setting") + params.UseFIPS = aws_sdkv2.Bool(false) + } - if useFIPS { + return r.defaultResolver.ResolveEndpoint(ctx, params) + } else if useFIPS { ctx = tflog.SetField(ctx, "tf_aws.use_fips", useFIPS) - endpoint, err = defaultResolver.EndpointFor(service, region, opts...) + endpoint, err = r.defaultResolver.ResolveEndpoint(ctx, params) if err != nil { return endpoint, err } tflog.Debug(ctx, "endpoint resolved", map[string]any{ - "tf_aws.endpoint": endpoint.URL, + "tf_aws.endpoint": endpoint.URI.String(), }) - var endpointURL *url.URL - endpointURL, err = url.Parse(endpoint.URL) - if err != nil { - return endpoint, err - } - - hostname := endpointURL.Hostname() + hostname := endpoint.URI.Hostname() _, err = net.LookupHost(hostname) if err != nil { if dnsErr, ok := errs.As[*net.DNSError](err); ok && dnsErr.IsNotFound { tflog.Debug(ctx, "default endpoint host not found, disabling FIPS", map[string]any{ "tf_aws.hostname": hostname, }) - opts = append(opts, func(o *endpoints_sdkv1.Options) { - o.UseFIPSEndpoint = endpoints_sdkv1.FIPSEndpointStateDisabled - }) + params.UseFIPS = aws_sdkv2.Bool(false) } else { - err = fmt.Errorf("looking up accessanalyzer endpoint %q: %s", hostname, err) + err = fmt.Errorf("looking up route53resolver endpoint %q: %s", hostname, err) return } } else { @@ -72,5 +70,13 @@ func (r resolverSDKv1) EndpointFor(service, region string, opts ...func(*endpoin } } - return defaultResolver.EndpointFor(service, region, opts...) + return r.defaultResolver.ResolveEndpoint(ctx, params) +} + +func withBaseEndpoint(endpoint string) func(*route53resolver_sdkv2.Options) { + return func(o *route53resolver_sdkv2.Options) { + if endpoint != "" { + o.BaseEndpoint = aws_sdkv2.String(endpoint) + } + } } diff --git a/internal/service/route53resolver/service_endpoints_gen_test.go b/internal/service/route53resolver/service_endpoints_gen_test.go index 2f319bf15488..8f540d685772 100644 --- a/internal/service/route53resolver/service_endpoints_gen_test.go +++ b/internal/service/route53resolver/service_endpoints_gen_test.go @@ -4,18 +4,22 @@ package route53resolver_test import ( "context" + "errors" "fmt" "maps" "net" "net/url" "os" "path/filepath" + "reflect" "strings" "testing" - aws_sdkv1 "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/endpoints" - route53resolver_sdkv1 "github.com/aws/aws-sdk-go/service/route53resolver" + aws_sdkv2 "github.com/aws/aws-sdk-go-v2/aws" + awsmiddleware "github.com/aws/aws-sdk-go-v2/aws/middleware" + route53resolver_sdkv2 "github.com/aws/aws-sdk-go-v2/service/route53resolver" + "github.com/aws/smithy-go/middleware" + smithyhttp "github.com/aws/smithy-go/transport/http" "github.com/google/go-cmp/cmp" "github.com/hashicorp/aws-sdk-go-base/v2/servicemocks" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" @@ -240,54 +244,63 @@ func TestEndpointConfiguration(t *testing.T) { //nolint:paralleltest // uses t.S } func defaultEndpoint(region string) (url.URL, error) { - r := endpoints.DefaultResolver() + r := route53resolver_sdkv2.NewDefaultEndpointResolverV2() - ep, err := r.EndpointFor(route53resolver_sdkv1.EndpointsID, region) + ep, err := r.ResolveEndpoint(context.Background(), route53resolver_sdkv2.EndpointParameters{ + Region: aws_sdkv2.String(region), + }) if err != nil { return url.URL{}, err } - url, _ := url.Parse(ep.URL) - - if url.Path == "" { - url.Path = "/" + if ep.URI.Path == "" { + ep.URI.Path = "/" } - return *url, nil + return ep.URI, nil } func defaultFIPSEndpoint(region string) (url.URL, error) { - r := endpoints.DefaultResolver() + r := route53resolver_sdkv2.NewDefaultEndpointResolverV2() - ep, err := r.EndpointFor(route53resolver_sdkv1.EndpointsID, region, func(opt *endpoints.Options) { - opt.UseFIPSEndpoint = endpoints.FIPSEndpointStateEnabled + ep, err := r.ResolveEndpoint(context.Background(), route53resolver_sdkv2.EndpointParameters{ + Region: aws_sdkv2.String(region), + UseFIPS: aws_sdkv2.Bool(true), }) if err != nil { return url.URL{}, err } - url, _ := url.Parse(ep.URL) - - if url.Path == "" { - url.Path = "/" + if ep.URI.Path == "" { + ep.URI.Path = "/" } - return *url, nil + return ep.URI, nil } func callService(ctx context.Context, t *testing.T, meta *conns.AWSClient) apiCallParams { t.Helper() - client := meta.Route53ResolverConn(ctx) + client := meta.Route53ResolverClient(ctx) - req, _ := client.ListFirewallDomainListsRequest(&route53resolver_sdkv1.ListFirewallDomainListsInput{}) + var result apiCallParams - req.HTTPRequest.URL.Path = "/" - - return apiCallParams{ - endpoint: req.HTTPRequest.URL.String(), - region: aws_sdkv1.StringValue(client.Config.Region), + _, err := client.ListFirewallDomainLists(ctx, &route53resolver_sdkv2.ListFirewallDomainListsInput{}, + func(opts *route53resolver_sdkv2.Options) { + opts.APIOptions = append(opts.APIOptions, + addRetrieveEndpointURLMiddleware(t, &result.endpoint), + addRetrieveRegionMiddleware(&result.region), + addCancelRequestMiddleware(), + ) + }, + ) + if err == nil { + t.Fatal("Expected an error, got none") + } else if !errors.Is(err, errCancelOperation) { + t.Fatalf("Unexpected error: %s", err) } + + return result } func withNoConfig(_ *caseSetup) { @@ -466,6 +479,89 @@ func testEndpointCase(t *testing.T, region string, testcase endpointTestCase, ca } } +func addRetrieveEndpointURLMiddleware(t *testing.T, endpoint *string) func(*middleware.Stack) error { + return func(stack *middleware.Stack) error { + return stack.Finalize.Add( + retrieveEndpointURLMiddleware(t, endpoint), + middleware.After, + ) + } +} + +func retrieveEndpointURLMiddleware(t *testing.T, endpoint *string) middleware.FinalizeMiddleware { + return middleware.FinalizeMiddlewareFunc( + "Test: Retrieve Endpoint", + func(ctx context.Context, in middleware.FinalizeInput, next middleware.FinalizeHandler) (middleware.FinalizeOutput, middleware.Metadata, error) { + t.Helper() + + request, ok := in.Request.(*smithyhttp.Request) + if !ok { + t.Fatalf("Expected *github.com/aws/smithy-go/transport/http.Request, got %s", fullTypeName(in.Request)) + } + + url := request.URL + url.RawQuery = "" + url.Path = "/" + + *endpoint = url.String() + + return next.HandleFinalize(ctx, in) + }) +} + +func addRetrieveRegionMiddleware(region *string) func(*middleware.Stack) error { + return func(stack *middleware.Stack) error { + return stack.Serialize.Add( + retrieveRegionMiddleware(region), + middleware.After, + ) + } +} + +func retrieveRegionMiddleware(region *string) middleware.SerializeMiddleware { + return middleware.SerializeMiddlewareFunc( + "Test: Retrieve Region", + func(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) (middleware.SerializeOutput, middleware.Metadata, error) { + *region = awsmiddleware.GetRegion(ctx) + + return next.HandleSerialize(ctx, in) + }, + ) +} + +var errCancelOperation = fmt.Errorf("Test: Canceling request") + +func addCancelRequestMiddleware() func(*middleware.Stack) error { + return func(stack *middleware.Stack) error { + return stack.Finalize.Add( + cancelRequestMiddleware(), + middleware.After, + ) + } +} + +// cancelRequestMiddleware creates a Smithy middleware that intercepts the request before sending and cancels it +func cancelRequestMiddleware() middleware.FinalizeMiddleware { + return middleware.FinalizeMiddlewareFunc( + "Test: Cancel Requests", + func(_ context.Context, in middleware.FinalizeInput, next middleware.FinalizeHandler) (middleware.FinalizeOutput, middleware.Metadata, error) { + return middleware.FinalizeOutput{}, middleware.Metadata{}, errCancelOperation + }) +} + +func fullTypeName(i interface{}) string { + return fullValueTypeName(reflect.ValueOf(i)) +} + +func fullValueTypeName(v reflect.Value) string { + if v.Kind() == reflect.Ptr { + return "*" + fullValueTypeName(reflect.Indirect(v)) + } + + requestType := v.Type() + return fmt.Sprintf("%s.%s", requestType.PkgPath(), requestType.Name()) +} + func generateSharedConfigFile(config configFile) string { var buf strings.Builder diff --git a/internal/service/route53resolver/service_package_gen.go b/internal/service/route53resolver/service_package_gen.go index 358ef8563a1d..9faa421f7d2e 100644 --- a/internal/service/route53resolver/service_package_gen.go +++ b/internal/service/route53resolver/service_package_gen.go @@ -5,10 +5,8 @@ package route53resolver import ( "context" - aws_sdkv1 "github.com/aws/aws-sdk-go/aws" - session_sdkv1 "github.com/aws/aws-sdk-go/aws/session" - route53resolver_sdkv1 "github.com/aws/aws-sdk-go/service/route53resolver" - "github.com/hashicorp/terraform-plugin-log/tflog" + aws_sdkv2 "github.com/aws/aws-sdk-go-v2/aws" + route53resolver_sdkv2 "github.com/aws/aws-sdk-go-v2/service/route53resolver" "github.com/hashicorp/terraform-provider-aws/internal/conns" "github.com/hashicorp/terraform-provider-aws/internal/types" "github.com/hashicorp/terraform-provider-aws/names" @@ -27,40 +25,49 @@ func (p *servicePackage) FrameworkResources(ctx context.Context) []*types.Servic func (p *servicePackage) SDKDataSources(ctx context.Context) []*types.ServicePackageSDKDataSource { return []*types.ServicePackageSDKDataSource{ { - Factory: DataSourceEndpoint, + Factory: dataSourceEndpoint, TypeName: "aws_route53_resolver_endpoint", + Name: "Endpoint", }, { - Factory: DataSourceFirewallConfig, + Factory: dataSourceFirewallConfig, TypeName: "aws_route53_resolver_firewall_config", + Name: "Firewall Config", }, { - Factory: DataSourceFirewallDomainList, + Factory: dataSourceFirewallDomainList, TypeName: "aws_route53_resolver_firewall_domain_list", + Name: "Firewall Domain List", }, { - Factory: DataSourceFirewallRuleGroup, + Factory: dataSourceFirewallRuleGroup, TypeName: "aws_route53_resolver_firewall_rule_group", + Name: "Firewall Rule Group", }, { - Factory: DataSourceFirewallRuleGroupAssociation, + Factory: dataSourceFirewallRuleGroupAssociation, TypeName: "aws_route53_resolver_firewall_rule_group_association", + Name: "Firewall Rule Group Association", }, { - Factory: DataSourceResolverFirewallRules, + Factory: dataSourceResolverFirewallRules, TypeName: "aws_route53_resolver_firewall_rules", + Name: "Firewall Rules", }, { - Factory: DataSourceQueryLogConfig, + Factory: dataSourceQueryLogConfig, TypeName: "aws_route53_resolver_query_log_config", + Name: "Query Log Config", }, { - Factory: DataSourceRule, + Factory: dataSourceRule, TypeName: "aws_route53_resolver_rule", + Name: "Rule", }, { - Factory: DataSourceRules, + Factory: dataSourceRules, TypeName: "aws_route53_resolver_rules", + Name: "Rules", }, } } @@ -68,15 +75,17 @@ func (p *servicePackage) SDKDataSources(ctx context.Context) []*types.ServicePac func (p *servicePackage) SDKResources(ctx context.Context) []*types.ServicePackageSDKResource { return []*types.ServicePackageSDKResource{ { - Factory: ResourceConfig, + Factory: resourceConfig, TypeName: "aws_route53_resolver_config", + Name: "Config", }, { - Factory: ResourceDNSSECConfig, + Factory: resourceDNSSECConfig, TypeName: "aws_route53_resolver_dnssec_config", + Name: "DNSSEC Config", }, { - Factory: ResourceEndpoint, + Factory: resourceEndpoint, TypeName: "aws_route53_resolver_endpoint", Name: "Endpoint", Tags: &types.ServicePackageResourceTags{ @@ -84,11 +93,12 @@ func (p *servicePackage) SDKResources(ctx context.Context) []*types.ServicePacka }, }, { - Factory: ResourceFirewallConfig, + Factory: resourceFirewallConfig, TypeName: "aws_route53_resolver_firewall_config", + Name: "Firewall Config", }, { - Factory: ResourceFirewallDomainList, + Factory: resourceFirewallDomainList, TypeName: "aws_route53_resolver_firewall_domain_list", Name: "Firewall Domain List", Tags: &types.ServicePackageResourceTags{ @@ -96,11 +106,12 @@ func (p *servicePackage) SDKResources(ctx context.Context) []*types.ServicePacka }, }, { - Factory: ResourceFirewallRule, + Factory: resourceFirewallRule, TypeName: "aws_route53_resolver_firewall_rule", + Name: "Firewall Rule", }, { - Factory: ResourceFirewallRuleGroup, + Factory: resourceFirewallRuleGroup, TypeName: "aws_route53_resolver_firewall_rule_group", Name: "Firewall Rule Group", Tags: &types.ServicePackageResourceTags{ @@ -108,15 +119,15 @@ func (p *servicePackage) SDKResources(ctx context.Context) []*types.ServicePacka }, }, { - Factory: ResourceFirewallRuleGroupAssociation, + Factory: resourceFirewallRuleGroupAssociation, TypeName: "aws_route53_resolver_firewall_rule_group_association", - Name: "Rule Group Association", + Name: "Firewall Rule Group Association", Tags: &types.ServicePackageResourceTags{ IdentifierAttribute: names.AttrARN, }, }, { - Factory: ResourceQueryLogConfig, + Factory: resourceQueryLogConfig, TypeName: "aws_route53_resolver_query_log_config", Name: "Query Log Config", Tags: &types.ServicePackageResourceTags{ @@ -124,11 +135,12 @@ func (p *servicePackage) SDKResources(ctx context.Context) []*types.ServicePacka }, }, { - Factory: ResourceQueryLogConfigAssociation, + Factory: resourceQueryLogConfigAssociation, TypeName: "aws_route53_resolver_query_log_config_association", + Name: "Query Log Config Association", }, { - Factory: ResourceRule, + Factory: resourceRule, TypeName: "aws_route53_resolver_rule", Name: "Rule", Tags: &types.ServicePackageResourceTags{ @@ -136,8 +148,9 @@ func (p *servicePackage) SDKResources(ctx context.Context) []*types.ServicePacka }, }, { - Factory: ResourceRuleAssociation, + Factory: resourceRuleAssociation, TypeName: "aws_route53_resolver_rule_association", + Name: "Rule Association", }, } } @@ -146,22 +159,14 @@ func (p *servicePackage) ServicePackageName() string { return names.Route53Resolver } -// NewConn returns a new AWS SDK for Go v1 client for this service package's AWS API. -func (p *servicePackage) NewConn(ctx context.Context, config map[string]any) (*route53resolver_sdkv1.Route53Resolver, error) { - sess := config[names.AttrSession].(*session_sdkv1.Session) - - cfg := aws_sdkv1.Config{} - - if endpoint := config[names.AttrEndpoint].(string); endpoint != "" { - tflog.Debug(ctx, "setting endpoint", map[string]any{ - "tf_aws.endpoint": endpoint, - }) - cfg.Endpoint = aws_sdkv1.String(endpoint) - } else { - cfg.EndpointResolver = newEndpointResolverSDKv1(ctx) - } +// NewClient returns a new AWS SDK for Go v2 client for this service package's AWS API. +func (p *servicePackage) NewClient(ctx context.Context, config map[string]any) (*route53resolver_sdkv2.Client, error) { + cfg := *(config["aws_sdkv2_config"].(*aws_sdkv2.Config)) - return route53resolver_sdkv1.New(sess.Copy(&cfg)), nil + return route53resolver_sdkv2.NewFromConfig(cfg, + route53resolver_sdkv2.WithEndpointResolverV2(newEndpointResolverSDKv2()), + withBaseEndpoint(config[names.AttrEndpoint].(string)), + ), nil } func ServicePackage(ctx context.Context) conns.ServicePackage { diff --git a/internal/service/route53resolver/tags_gen.go b/internal/service/route53resolver/tags_gen.go index 9526a96ec5d3..9b0dabd24363 100644 --- a/internal/service/route53resolver/tags_gen.go +++ b/internal/service/route53resolver/tags_gen.go @@ -5,9 +5,9 @@ import ( "context" "fmt" - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/service/route53resolver" - "github.com/aws/aws-sdk-go/service/route53resolver/route53resolveriface" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/route53resolver" + awstypes "github.com/aws/aws-sdk-go-v2/service/route53resolver/types" "github.com/hashicorp/terraform-plugin-log/tflog" "github.com/hashicorp/terraform-provider-aws/internal/conns" "github.com/hashicorp/terraform-provider-aws/internal/logging" @@ -19,12 +19,12 @@ import ( // listTags lists route53resolver service tags. // The identifier is typically the Amazon Resource Name (ARN), although // it may also be a different identifier depending on the service. -func listTags(ctx context.Context, conn route53resolveriface.Route53ResolverAPI, identifier string) (tftags.KeyValueTags, error) { +func listTags(ctx context.Context, conn *route53resolver.Client, identifier string, optFns ...func(*route53resolver.Options)) (tftags.KeyValueTags, error) { input := &route53resolver.ListTagsForResourceInput{ ResourceArn: aws.String(identifier), } - output, err := conn.ListTagsForResourceWithContext(ctx, input) + output, err := conn.ListTagsForResource(ctx, input, optFns...) if err != nil { return tftags.New(ctx, nil), err @@ -36,7 +36,7 @@ func listTags(ctx context.Context, conn route53resolveriface.Route53ResolverAPI, // ListTags lists route53resolver service tags and set them in Context. // It is called from outside this package. func (p *servicePackage) ListTags(ctx context.Context, meta any, identifier string) error { - tags, err := listTags(ctx, meta.(*conns.AWSClient).Route53ResolverConn(ctx), identifier) + tags, err := listTags(ctx, meta.(*conns.AWSClient).Route53ResolverClient(ctx), identifier) if err != nil { return err @@ -52,11 +52,11 @@ func (p *servicePackage) ListTags(ctx context.Context, meta any, identifier stri // []*SERVICE.Tag handling // Tags returns route53resolver service tags. -func Tags(tags tftags.KeyValueTags) []*route53resolver.Tag { - result := make([]*route53resolver.Tag, 0, len(tags)) +func Tags(tags tftags.KeyValueTags) []awstypes.Tag { + result := make([]awstypes.Tag, 0, len(tags)) for k, v := range tags.Map() { - tag := &route53resolver.Tag{ + tag := awstypes.Tag{ Key: aws.String(k), Value: aws.String(v), } @@ -68,11 +68,11 @@ func Tags(tags tftags.KeyValueTags) []*route53resolver.Tag { } // KeyValueTags creates tftags.KeyValueTags from route53resolver service tags. -func KeyValueTags(ctx context.Context, tags []*route53resolver.Tag) tftags.KeyValueTags { +func KeyValueTags(ctx context.Context, tags []awstypes.Tag) tftags.KeyValueTags { m := make(map[string]*string, len(tags)) for _, tag := range tags { - m[aws.StringValue(tag.Key)] = tag.Value + m[aws.ToString(tag.Key)] = tag.Value } return tftags.New(ctx, m) @@ -80,7 +80,7 @@ func KeyValueTags(ctx context.Context, tags []*route53resolver.Tag) tftags.KeyVa // getTagsIn returns route53resolver service tags from Context. // nil is returned if there are no input tags. -func getTagsIn(ctx context.Context) []*route53resolver.Tag { +func getTagsIn(ctx context.Context) []awstypes.Tag { if inContext, ok := tftags.FromContext(ctx); ok { if tags := Tags(inContext.TagsIn.UnwrapOrDefault()); len(tags) > 0 { return tags @@ -91,7 +91,7 @@ func getTagsIn(ctx context.Context) []*route53resolver.Tag { } // setTagsOut sets route53resolver service tags in Context. -func setTagsOut(ctx context.Context, tags []*route53resolver.Tag) { +func setTagsOut(ctx context.Context, tags []awstypes.Tag) { if inContext, ok := tftags.FromContext(ctx); ok { inContext.TagsOut = option.Some(KeyValueTags(ctx, tags)) } @@ -100,7 +100,7 @@ func setTagsOut(ctx context.Context, tags []*route53resolver.Tag) { // updateTags updates route53resolver service tags. // The identifier is typically the Amazon Resource Name (ARN), although // it may also be a different identifier depending on the service. -func updateTags(ctx context.Context, conn route53resolveriface.Route53ResolverAPI, identifier string, oldTagsMap, newTagsMap any) error { +func updateTags(ctx context.Context, conn *route53resolver.Client, identifier string, oldTagsMap, newTagsMap any, optFns ...func(*route53resolver.Options)) error { oldTags := tftags.New(ctx, oldTagsMap) newTags := tftags.New(ctx, newTagsMap) @@ -111,10 +111,10 @@ func updateTags(ctx context.Context, conn route53resolveriface.Route53ResolverAP if len(removedTags) > 0 { input := &route53resolver.UntagResourceInput{ ResourceArn: aws.String(identifier), - TagKeys: aws.StringSlice(removedTags.Keys()), + TagKeys: removedTags.Keys(), } - _, err := conn.UntagResourceWithContext(ctx, input) + _, err := conn.UntagResource(ctx, input, optFns...) if err != nil { return fmt.Errorf("untagging resource (%s): %w", identifier, err) @@ -129,7 +129,7 @@ func updateTags(ctx context.Context, conn route53resolveriface.Route53ResolverAP Tags: Tags(updatedTags), } - _, err := conn.TagResourceWithContext(ctx, input) + _, err := conn.TagResource(ctx, input, optFns...) if err != nil { return fmt.Errorf("tagging resource (%s): %w", identifier, err) @@ -142,5 +142,5 @@ func updateTags(ctx context.Context, conn route53resolveriface.Route53ResolverAP // UpdateTags updates route53resolver service tags. // It is called from outside this package. func (p *servicePackage) UpdateTags(ctx context.Context, meta any, identifier string, oldTags, newTags any) error { - return updateTags(ctx, meta.(*conns.AWSClient).Route53ResolverConn(ctx), identifier, oldTags, newTags) + return updateTags(ctx, meta.(*conns.AWSClient).Route53ResolverClient(ctx), identifier, oldTags, newTags) } diff --git a/names/data/names_data.hcl b/names/data/names_data.hcl index 0f645e2347f8..78deec1ff118 100644 --- a/names/data/names_data.hcl +++ b/names/data/names_data.hcl @@ -7864,7 +7864,7 @@ service "route53resolver" { sdk { id = "Route53Resolver" - client_version = [1] + client_version = [2] } names { From 3c8af7243c197e5c3d9191bd7872ec37a52b9ec2 Mon Sep 17 00:00:00 2001 From: Daniel Rieske Date: Sat, 10 Aug 2024 00:26:04 +0200 Subject: [PATCH 25/32] feat: exports --- .../service/route53resolver/exports_test.go | 28 ++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/internal/service/route53resolver/exports_test.go b/internal/service/route53resolver/exports_test.go index 61ad4ef514d4..8a2d907a68f2 100644 --- a/internal/service/route53resolver/exports_test.go +++ b/internal/service/route53resolver/exports_test.go @@ -5,5 +5,31 @@ package route53resolver // Exports for use in tests only. var ( - ValidResolverName = validResolverName + ResourceDNSSECConfig = resourceDNSSECConfig + ResourceEndpoint = resourceEndpoint + ResourceFirewallConfig = resourceFirewallConfig + ResourceFirewallDomainList = resourceFirewallDomainList + ResourceFirewallRuleGroupAssociation = resourceFirewallRuleGroupAssociation + ResourceFirewallRuleGroup = resourceFirewallRuleGroup + ResourceFirewallRule = resourceFirewallRule + ResourceQueryLogConfigAssociation = resourceQueryLogConfigAssociation + ResourceQueryLogConfig = resourceQueryLogConfig + ResourceRuleAssociation = resourceRuleAssociation + ResourceRule = resourceRule + + FirewallRuleParseResourceID = firewallRuleParseResourceID + ValidResolverName = validResolverName + + FindResolverConfigByID = findResolverConfigByID + FindResolverDNSSECConfigByID = findResolverDNSSECConfigByID + FindResolverEndpointByID = findResolverEndpointByID + FindFirewallConfigByID = findFirewallConfigByID + FindFirewallDomainListByID = findFirewallDomainListByID + FindFirewallRuleGroupAssociationByID = findFirewallRuleGroupAssociationByID + FindFirewallRuleGroupByID = findFirewallRuleGroupByID + FindFirewallRuleByTwoPartKey = findFirewallRuleByTwoPartKey + FindResolverQueryLogConfigAssociationByID = findResolverQueryLogConfigAssociationByID + FindResolverQueryLogConfigByID = findResolverQueryLogConfigByID + FindResolverRuleAssociationByID = findResolverRuleAssociationByID + FindResolverRuleByID = findResolverRuleByID ) From d5910d90969d00dd7e706f04dd3bc64d330bb198 Mon Sep 17 00:00:00 2001 From: Daniel Rieske Date: Sat, 10 Aug 2024 00:26:23 +0200 Subject: [PATCH 26/32] feat remove validation on computed field --- internal/service/route53resolver/dnssec_config.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/internal/service/route53resolver/dnssec_config.go b/internal/service/route53resolver/dnssec_config.go index 0c37235fe586..0ccbe7f0a70e 100644 --- a/internal/service/route53resolver/dnssec_config.go +++ b/internal/service/route53resolver/dnssec_config.go @@ -50,9 +50,8 @@ func resourceDNSSECConfig() *schema.Resource { ForceNew: true, }, "validation_status": { - Type: schema.TypeString, - Computed: true, - ValidateDiagFunc: enum.Validate[awstypes.ResolverDNSSECValidationStatus](), + Type: schema.TypeString, + Computed: true, }, }, } From ba41f23ed4b4f303dc6b92843aedabe8f68fef95 Mon Sep 17 00:00:00 2001 From: Daniel Rieske Date: Sat, 10 Aug 2024 00:57:14 +0200 Subject: [PATCH 27/32] fix: semgrep findings --- internal/service/route53resolver/endpoint.go | 16 ++++++++-------- .../route53resolver/firewall_domain_list.go | 2 +- .../route53resolver/firewall_rule_group.go | 2 +- .../firewall_rule_group_association.go | 2 +- internal/service/route53resolver/rule.go | 2 +- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/internal/service/route53resolver/endpoint.go b/internal/service/route53resolver/endpoint.go index 0d7b6ccf9838..8bbcf1a699ca 100644 --- a/internal/service/route53resolver/endpoint.go +++ b/internal/service/route53resolver/endpoint.go @@ -171,7 +171,7 @@ func resourceEndpointRead(ctx context.Context, d *schema.ResourceData, meta inte var diags diag.Diagnostics conn := meta.(*conns.AWSClient).Route53ResolverClient(ctx) - ep, err := findResolverEndpointByID(ctx, conn, d.Id()) + output, err := findResolverEndpointByID(ctx, conn, d.Id()) if !d.IsNewResource() && tfresource.NotFound(err) { log.Printf("[WARN] Route53 Resolver Endpoint (%s) not found, removing from state", d.Id()) @@ -183,13 +183,13 @@ func resourceEndpointRead(ctx context.Context, d *schema.ResourceData, meta inte return sdkdiag.AppendErrorf(diags, "reading Route53 Resolver Endpoint (%s): %s", d.Id(), err) } - d.Set(names.AttrARN, aws.ToString(ep.Arn)) - d.Set("direction", ep.Direction) - d.Set("host_vpc_id", ep.HostVPCId) - d.Set(names.AttrName, ep.Name) - d.Set("protocols", flex.FlattenStringyValueSet[awstypes.Protocol](ep.Protocols)) - d.Set("resolver_endpoint_type", ep.ResolverEndpointType) - d.Set(names.AttrSecurityGroupIDs, ep.SecurityGroupIds) + d.Set(names.AttrARN, output.Arn) + d.Set("direction", output.Direction) + d.Set("host_vpc_id", output.HostVPCId) + d.Set(names.AttrName, output.Name) + d.Set("protocols", flex.FlattenStringyValueSet[awstypes.Protocol](output.Protocols)) + d.Set("resolver_endpoint_type", output.ResolverEndpointType) + d.Set(names.AttrSecurityGroupIDs, output.SecurityGroupIds) ipAddresses, err := findResolverEndpointIPAddressesByID(ctx, conn, d.Id()) diff --git a/internal/service/route53resolver/firewall_domain_list.go b/internal/service/route53resolver/firewall_domain_list.go index 1601ac756102..301b71108232 100644 --- a/internal/service/route53resolver/firewall_domain_list.go +++ b/internal/service/route53resolver/firewall_domain_list.go @@ -118,7 +118,7 @@ func resourceFirewallDomainListRead(ctx context.Context, d *schema.ResourceData, return sdkdiag.AppendErrorf(diags, "reading Route53 Resolver Firewall Domain List (%s): %s", d.Id(), err) } - d.Set(names.AttrARN, aws.ToString(firewallDomainList.Arn)) + d.Set(names.AttrARN, firewallDomainList.Arn) d.Set(names.AttrName, firewallDomainList.Name) input := &route53resolver.ListFirewallDomainsInput{ diff --git a/internal/service/route53resolver/firewall_rule_group.go b/internal/service/route53resolver/firewall_rule_group.go index d829ba79a698..54efd9785a6f 100644 --- a/internal/service/route53resolver/firewall_rule_group.go +++ b/internal/service/route53resolver/firewall_rule_group.go @@ -101,7 +101,7 @@ func resourceFirewallRuleGroupRead(ctx context.Context, d *schema.ResourceData, return sdkdiag.AppendErrorf(diags, "reading Route53 Resolver Firewall Rule Group (%s): %s", d.Id(), err) } - d.Set(names.AttrARN, aws.ToString(ruleGroup.Arn)) + d.Set(names.AttrARN, ruleGroup.Arn) d.Set(names.AttrName, ruleGroup.Name) d.Set(names.AttrOwnerID, ruleGroup.OwnerId) d.Set("share_status", ruleGroup.ShareStatus) diff --git a/internal/service/route53resolver/firewall_rule_group_association.go b/internal/service/route53resolver/firewall_rule_group_association.go index 0d3c61c24b13..65ff8a586ae5 100644 --- a/internal/service/route53resolver/firewall_rule_group_association.go +++ b/internal/service/route53resolver/firewall_rule_group_association.go @@ -126,7 +126,7 @@ func resourceFirewallRuleGroupAssociationRead(ctx context.Context, d *schema.Res return sdkdiag.AppendErrorf(diags, "reading Route53 Resolver Firewall Rule Group Association (%s): %s", d.Id(), err) } - d.Set(names.AttrARN, aws.ToString(ruleGroupAssociation.Arn)) + d.Set(names.AttrARN, ruleGroupAssociation.Arn) d.Set(names.AttrName, ruleGroupAssociation.Name) d.Set("firewall_rule_group_id", ruleGroupAssociation.FirewallRuleGroupId) d.Set("mutation_protection", ruleGroupAssociation.MutationProtection) diff --git a/internal/service/route53resolver/rule.go b/internal/service/route53resolver/rule.go index 809eb78e6d12..26f559712ac9 100644 --- a/internal/service/route53resolver/rule.go +++ b/internal/service/route53resolver/rule.go @@ -173,7 +173,7 @@ func resourceRuleRead(ctx context.Context, d *schema.ResourceData, meta interfac return sdkdiag.AppendErrorf(diags, "reading Route53 Resolver Rule (%s): %s", d.Id(), err) } - d.Set(names.AttrARN, aws.ToString(rule.Arn)) + d.Set(names.AttrARN, rule.Arn) // To be consistent with other AWS services that do not accept a trailing period, // we remove the suffix from the Domain Name returned from the API d.Set(names.AttrDomainName, trimTrailingPeriod(aws.ToString(rule.DomainName))) From 3769d9c67d2087d22b8b37771667163c3d564cfe Mon Sep 17 00:00:00 2001 From: Daniel Rieske Date: Sat, 10 Aug 2024 01:19:42 +0200 Subject: [PATCH 28/32] fix: semgrep findings --- internal/service/route53resolver/config.go | 10 +++------- internal/service/route53resolver/dnssec_config.go | 10 +++------- internal/service/route53resolver/firewall_config.go | 8 ++++---- .../route53resolver/query_log_config_data_source.go | 2 +- internal/service/route53resolver/rule_data_source.go | 2 +- 5 files changed, 12 insertions(+), 20 deletions(-) diff --git a/internal/service/route53resolver/config.go b/internal/service/route53resolver/config.go index 4ad545347a41..ab5b1e6f1b51 100644 --- a/internal/service/route53resolver/config.go +++ b/internal/service/route53resolver/config.go @@ -126,7 +126,7 @@ func resourceConfigUpdate(ctx context.Context, d *schema.ResourceData, meta inte func findResolverConfigByID(ctx context.Context, conn *route53resolver.Client, id string) (*awstypes.ResolverConfig, error) { input := &route53resolver.ListResolverConfigsInput{} - var output *awstypes.ResolverConfig + var output awstypes.ResolverConfig // GetResolverConfig does not support query by ID. pages := route53resolver.NewListResolverConfigsPaginator(conn, input) @@ -144,19 +144,15 @@ func findResolverConfigByID(ctx context.Context, conn *route53resolver.Client, i return nil, err } - if output == nil { - return nil, tfresource.NewEmptyResultError(input) - } - for _, v := range page.ResolverConfigs { if aws.ToString(v.Id) == id { - output = &v + output = v break } } } - return output, nil + return &output, nil } func statusAutodefinedReverse(ctx context.Context, conn *route53resolver.Client, id string) retry.StateRefreshFunc { diff --git a/internal/service/route53resolver/dnssec_config.go b/internal/service/route53resolver/dnssec_config.go index 0ccbe7f0a70e..8ea7f1567b2d 100644 --- a/internal/service/route53resolver/dnssec_config.go +++ b/internal/service/route53resolver/dnssec_config.go @@ -142,7 +142,7 @@ func resourceDNSSECConfigDelete(ctx context.Context, d *schema.ResourceData, met func findResolverDNSSECConfigByID(ctx context.Context, conn *route53resolver.Client, id string) (*awstypes.ResolverDnssecConfig, error) { input := &route53resolver.ListResolverDnssecConfigsInput{} - var output *awstypes.ResolverDnssecConfig + var output awstypes.ResolverDnssecConfig // GetResolverDnssecConfig does not support query by ID. pages := route53resolver.NewListResolverDnssecConfigsPaginator(conn, input) @@ -160,10 +160,6 @@ func findResolverDNSSECConfigByID(ctx context.Context, conn *route53resolver.Cli return nil, err } - if output == nil { - return nil, tfresource.NewEmptyResultError(input) - } - if validationStatus := output.ValidationStatus; validationStatus == awstypes.ResolverDNSSECValidationStatusDisabled { return nil, &retry.NotFoundError{ Message: string(validationStatus), @@ -173,13 +169,13 @@ func findResolverDNSSECConfigByID(ctx context.Context, conn *route53resolver.Cli for _, v := range page.ResolverDnssecConfigs { if aws.ToString(v.Id) == id { - output = &v + output = v break } } } - return output, nil + return &output, nil } func statusDNSSECConfig(ctx context.Context, conn *route53resolver.Client, id string) retry.StateRefreshFunc { diff --git a/internal/service/route53resolver/firewall_config.go b/internal/service/route53resolver/firewall_config.go index 2dfef45b4b1c..26901403882c 100644 --- a/internal/service/route53resolver/firewall_config.go +++ b/internal/service/route53resolver/firewall_config.go @@ -137,7 +137,7 @@ func resourceFirewallConfigDelete(ctx context.Context, d *schema.ResourceData, m func findFirewallConfigByID(ctx context.Context, conn *route53resolver.Client, id string) (*awstypes.FirewallConfig, error) { input := &route53resolver.ListFirewallConfigsInput{} - var output *awstypes.FirewallConfig + var output awstypes.FirewallConfig // GetFirewallConfig does not support query by ID. pages := route53resolver.NewListFirewallConfigsPaginator(conn, input) @@ -150,15 +150,15 @@ func findFirewallConfigByID(ctx context.Context, conn *route53resolver.Client, i for _, v := range page.FirewallConfigs { if aws.ToString(v.Id) == id { - output = &v + output = v break } } } - if output == nil { + if output.Id == nil { return nil, tfresource.NewEmptyResultError(input) } - return output, nil + return &output, nil } diff --git a/internal/service/route53resolver/query_log_config_data_source.go b/internal/service/route53resolver/query_log_config_data_source.go index 735bf92c8b8e..0bdf7bb3ff29 100644 --- a/internal/service/route53resolver/query_log_config_data_source.go +++ b/internal/service/route53resolver/query_log_config_data_source.go @@ -113,7 +113,7 @@ func dataSourceQueryLogConfigRead(ctx context.Context, d *schema.ResourceData, m d.Set(names.AttrOwnerID, config.OwnerId) d.Set("resolver_query_log_config_id", config.Id) - shareStatus := awstypes.ShareStatus(config.ShareStatus) + shareStatus := config.ShareStatus d.Set("share_status", shareStatus) if shareStatus != awstypes.ShareStatusSharedWithMe { diff --git a/internal/service/route53resolver/rule_data_source.go b/internal/service/route53resolver/rule_data_source.go index ee212581c9d1..dc1ab8c42d13 100644 --- a/internal/service/route53resolver/rule_data_source.go +++ b/internal/service/route53resolver/rule_data_source.go @@ -132,7 +132,7 @@ func dataSourceRuleRead(ctx context.Context, d *schema.ResourceData, meta interf d.Set("resolver_endpoint_id", rule.ResolverEndpointId) d.Set("resolver_rule_id", rule.Id) d.Set("rule_type", rule.RuleType) - shareStatus := awstypes.ShareStatus(rule.ShareStatus) + shareStatus := rule.ShareStatus d.Set("share_status", shareStatus) // https://github.com/hashicorp/terraform-provider-aws/issues/10211 if shareStatus != awstypes.ShareStatusSharedWithMe { From 73112e4c06a8dc3c5b023bdd4e36294043af8b80 Mon Sep 17 00:00:00 2001 From: Daniel Rieske Date: Sat, 10 Aug 2024 14:30:38 +0200 Subject: [PATCH 29/32] fix: `TestAccRoute53ResolverRulesDataSource_resolverEndpointID` remove creation of recursive rule. Only the Resolver service can make these types of rules and for the scope of the test scenario this is not needed. --- .../route53resolver/rules_data_source_test.go | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/internal/service/route53resolver/rules_data_source_test.go b/internal/service/route53resolver/rules_data_source_test.go index a599663f262b..2abf8162ef74 100644 --- a/internal/service/route53resolver/rules_data_source_test.go +++ b/internal/service/route53resolver/rules_data_source_test.go @@ -124,22 +124,16 @@ resource "aws_route53_resolver_rule" "forward" { } } -resource "aws_route53_resolver_rule" "recursive" { - domain_name = %[4]q - rule_type = "RECURSIVE" - name = %[2]q -} - data "aws_route53_resolver_rules" "by_resolver_endpoint_id" { owner_id = aws_route53_resolver_rule.forward.owner_id resolver_endpoint_id = aws_route53_resolver_rule.forward.resolver_endpoint_id } data "aws_route53_resolver_rules" "by_resolver_endpoint_id_rule_type_share_status" { - owner_id = aws_route53_resolver_rule.recursive.owner_id - resolver_endpoint_id = aws_route53_resolver_rule.recursive.resolver_endpoint_id - rule_type = aws_route53_resolver_rule.recursive.rule_type - share_status = aws_route53_resolver_rule.recursive.share_status + owner_id = aws_route53_resolver_rule.forward.owner_id + resolver_endpoint_id = aws_route53_resolver_rule.forward.resolver_endpoint_id + rule_type = aws_route53_resolver_rule.forward.rule_type + share_status = aws_route53_resolver_rule.forward.share_status } data "aws_route53_resolver_rules" "by_invalid_owner_id" { From e40e6a7ccf56cdb5feff93a5ff405eb10b5a0665 Mon Sep 17 00:00:00 2001 From: Daniel Rieske Date: Sat, 10 Aug 2024 14:30:57 +0200 Subject: [PATCH 30/32] chore: cleanup paginators --- internal/service/route53resolver/config.go | 14 +++++++++----- .../service/route53resolver/dnssec_config.go | 19 ++++++++----------- .../route53resolver/firewall_config.go | 10 ++-------- 3 files changed, 19 insertions(+), 24 deletions(-) diff --git a/internal/service/route53resolver/config.go b/internal/service/route53resolver/config.go index ab5b1e6f1b51..5ea557556d9d 100644 --- a/internal/service/route53resolver/config.go +++ b/internal/service/route53resolver/config.go @@ -94,7 +94,13 @@ func resourceConfigRead(ctx context.Context, d *schema.ResourceData, meta interf return sdkdiag.AppendErrorf(diags, "reading Route53 Resolver Config (%s): %s", d.Id(), err) } - d.Set("autodefined_reverse_flag", resolverConfig.AutodefinedReverse) + var autodefinedReverseFlag awstypes.AutodefinedReverseFlag + if resolverConfig.AutodefinedReverse == awstypes.ResolverAutodefinedReverseStatusEnabled { + autodefinedReverseFlag = awstypes.AutodefinedReverseFlagEnable + } else { + autodefinedReverseFlag = awstypes.AutodefinedReverseFlagDisable + } + d.Set("autodefined_reverse_flag", autodefinedReverseFlag) d.Set(names.AttrOwnerID, resolverConfig.OwnerId) d.Set(names.AttrResourceID, resolverConfig.ResourceId) @@ -126,7 +132,6 @@ func resourceConfigUpdate(ctx context.Context, d *schema.ResourceData, meta inte func findResolverConfigByID(ctx context.Context, conn *route53resolver.Client, id string) (*awstypes.ResolverConfig, error) { input := &route53resolver.ListResolverConfigsInput{} - var output awstypes.ResolverConfig // GetResolverConfig does not support query by ID. pages := route53resolver.NewListResolverConfigsPaginator(conn, input) @@ -146,13 +151,12 @@ func findResolverConfigByID(ctx context.Context, conn *route53resolver.Client, i for _, v := range page.ResolverConfigs { if aws.ToString(v.Id) == id { - output = v - break + return &v, nil } } } - return &output, nil + return nil, tfresource.NewEmptyResultError(input) } func statusAutodefinedReverse(ctx context.Context, conn *route53resolver.Client, id string) retry.StateRefreshFunc { diff --git a/internal/service/route53resolver/dnssec_config.go b/internal/service/route53resolver/dnssec_config.go index 8ea7f1567b2d..e9b7e2d763bc 100644 --- a/internal/service/route53resolver/dnssec_config.go +++ b/internal/service/route53resolver/dnssec_config.go @@ -142,7 +142,6 @@ func resourceDNSSECConfigDelete(ctx context.Context, d *schema.ResourceData, met func findResolverDNSSECConfigByID(ctx context.Context, conn *route53resolver.Client, id string) (*awstypes.ResolverDnssecConfig, error) { input := &route53resolver.ListResolverDnssecConfigsInput{} - var output awstypes.ResolverDnssecConfig // GetResolverDnssecConfig does not support query by ID. pages := route53resolver.NewListResolverDnssecConfigsPaginator(conn, input) @@ -160,22 +159,20 @@ func findResolverDNSSECConfigByID(ctx context.Context, conn *route53resolver.Cli return nil, err } - if validationStatus := output.ValidationStatus; validationStatus == awstypes.ResolverDNSSECValidationStatusDisabled { - return nil, &retry.NotFoundError{ - Message: string(validationStatus), - LastRequest: input, - } - } - for _, v := range page.ResolverDnssecConfigs { if aws.ToString(v.Id) == id { - output = v - break + if validationStatus := v.ValidationStatus; validationStatus == awstypes.ResolverDNSSECValidationStatusDisabled { + return nil, &retry.NotFoundError{ + Message: string(validationStatus), + LastRequest: input, + } + } + return &v, nil } } } - return &output, nil + return nil, tfresource.NewEmptyResultError(input) } func statusDNSSECConfig(ctx context.Context, conn *route53resolver.Client, id string) retry.StateRefreshFunc { diff --git a/internal/service/route53resolver/firewall_config.go b/internal/service/route53resolver/firewall_config.go index 26901403882c..47fae761b7a6 100644 --- a/internal/service/route53resolver/firewall_config.go +++ b/internal/service/route53resolver/firewall_config.go @@ -137,7 +137,6 @@ func resourceFirewallConfigDelete(ctx context.Context, d *schema.ResourceData, m func findFirewallConfigByID(ctx context.Context, conn *route53resolver.Client, id string) (*awstypes.FirewallConfig, error) { input := &route53resolver.ListFirewallConfigsInput{} - var output awstypes.FirewallConfig // GetFirewallConfig does not support query by ID. pages := route53resolver.NewListFirewallConfigsPaginator(conn, input) @@ -150,15 +149,10 @@ func findFirewallConfigByID(ctx context.Context, conn *route53resolver.Client, i for _, v := range page.FirewallConfigs { if aws.ToString(v.Id) == id { - output = v - break + return &v, nil } } } - if output.Id == nil { - return nil, tfresource.NewEmptyResultError(input) - } - - return &output, nil + return nil, tfresource.NewEmptyResultError(input) } From 33e6d8a3880bb32ee9375a2e3c217fe92cc010d7 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Tue, 13 Aug 2024 08:40:24 -0400 Subject: [PATCH 31/32] Run 'make clean-tidy'. --- go.mod | 2 +- tools/tfsdk2fw/go.mod | 1 + tools/tfsdk2fw/go.sum | 2 ++ 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index fc9fb218696b..6df7310738a5 100644 --- a/go.mod +++ b/go.mod @@ -191,6 +191,7 @@ require ( github.com/aws/aws-sdk-go-v2/service/route53profiles v1.2.3 github.com/aws/aws-sdk-go-v2/service/route53recoverycontrolconfig v1.23.3 github.com/aws/aws-sdk-go-v2/service/route53recoveryreadiness v1.19.3 + github.com/aws/aws-sdk-go-v2/service/route53resolver v1.30.3 github.com/aws/aws-sdk-go-v2/service/rum v1.19.3 github.com/aws/aws-sdk-go-v2/service/s3 v1.58.3 github.com/aws/aws-sdk-go-v2/service/s3control v1.46.3 @@ -298,7 +299,6 @@ require ( github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.9.16 // indirect github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.17 // indirect github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.15 // indirect - github.com/aws/aws-sdk-go-v2/service/route53resolver v1.30.3 // indirect github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.4 // indirect github.com/bgentry/speakeasy v0.1.0 // indirect github.com/boombuler/barcode v1.0.1 // indirect diff --git a/tools/tfsdk2fw/go.mod b/tools/tfsdk2fw/go.mod index cc1e23ead9ee..95d2bbc4430b 100644 --- a/tools/tfsdk2fw/go.mod +++ b/tools/tfsdk2fw/go.mod @@ -213,6 +213,7 @@ require ( github.com/aws/aws-sdk-go-v2/service/route53profiles v1.2.3 // indirect github.com/aws/aws-sdk-go-v2/service/route53recoverycontrolconfig v1.23.3 // indirect github.com/aws/aws-sdk-go-v2/service/route53recoveryreadiness v1.19.3 // indirect + github.com/aws/aws-sdk-go-v2/service/route53resolver v1.30.3 // indirect github.com/aws/aws-sdk-go-v2/service/rum v1.19.3 // indirect github.com/aws/aws-sdk-go-v2/service/s3 v1.58.3 // indirect github.com/aws/aws-sdk-go-v2/service/s3control v1.46.3 // indirect diff --git a/tools/tfsdk2fw/go.sum b/tools/tfsdk2fw/go.sum index 41f80c1b39a1..8daa455da2ad 100644 --- a/tools/tfsdk2fw/go.sum +++ b/tools/tfsdk2fw/go.sum @@ -412,6 +412,8 @@ github.com/aws/aws-sdk-go-v2/service/route53recoverycontrolconfig v1.23.3 h1:apY github.com/aws/aws-sdk-go-v2/service/route53recoverycontrolconfig v1.23.3/go.mod h1:citOcziml/EM6I2ycb7XHuBw0whC8jVD2y+vU7wQD4k= github.com/aws/aws-sdk-go-v2/service/route53recoveryreadiness v1.19.3 h1:M6D+IRT6YdeL+qLIdy4u4zEoMOqq3lJnNUGt0cxEI04= github.com/aws/aws-sdk-go-v2/service/route53recoveryreadiness v1.19.3/go.mod h1:y4m7VlTWV77mBzMdAZWjudnobe0E77tKy5Z9+IQIku0= +github.com/aws/aws-sdk-go-v2/service/route53resolver v1.30.3 h1:qbQ9OMsuBvjTfSiY8S7/mxezvSRtjyqcZcoBtPN4sqo= +github.com/aws/aws-sdk-go-v2/service/route53resolver v1.30.3/go.mod h1:BQBJkxokRLgXiBgHDYichq3aNynMRSqXu26Z2Fd8bao= github.com/aws/aws-sdk-go-v2/service/rum v1.19.3 h1:DR+GYJRPL7eEZknnGdwm+lH686LmUBB/X2YVQDHLNY4= github.com/aws/aws-sdk-go-v2/service/rum v1.19.3/go.mod h1:5jFxbuc05P/+BbJvVbBspMbzDR2IFU0LegQG3iUvj8g= github.com/aws/aws-sdk-go-v2/service/s3 v1.58.3 h1:hT8ZAZRIfqBqHbzKTII+CIiY8G2oC9OpLedkZ51DWl8= From 4ce92188ce0d16fa4120abc22116999ccbe2abc9 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Tue, 13 Aug 2024 09:34:22 -0400 Subject: [PATCH 32/32] Fix 'TestAccRoute53ResolverFirewallConfigDataSource_basic'. --- .../service/route53resolver/firewall_config_data_source_test.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/internal/service/route53resolver/firewall_config_data_source_test.go b/internal/service/route53resolver/firewall_config_data_source_test.go index e969492ecbce..8b131f7f587f 100644 --- a/internal/service/route53resolver/firewall_config_data_source_test.go +++ b/internal/service/route53resolver/firewall_config_data_source_test.go @@ -39,6 +39,8 @@ func testAccFirewallConfigDataSourceConfig_basic(rName string) string { return acctest.ConfigCompose(testAccFirewallConfigConfig_basic(rName), ` data "aws_route53_resolver_firewall_config" "test" { resource_id = aws_vpc.test.id + + depends_on = [aws_route53_resolver_firewall_config.test] } `) }