Skip to content

Commit

Permalink
r/aws_inspector_assessment_target: compose NotFound error in finder
Browse files Browse the repository at this point in the history
Rather than relying on a nil response object to infer when a target is not found, the associated finder function will not return a `retry.NotFoundError` when no matching targets are found in the Describe API response.
  • Loading branch information
jar-b committed Jul 19, 2024
1 parent b3b0a46 commit a6c55ab
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 25 deletions.
27 changes: 15 additions & 12 deletions internal/service/inspector/assessment_target.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,10 @@ func ResourceAssessmentTarget() *schema.Resource {
}
}

const (
ResNameAssessmentTarget = "Assessment Target"
)

func resourceAssessmentTargetCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
var diags diag.Diagnostics
conn := meta.(*conns.AWSClient).InspectorClient(ctx)
Expand All @@ -76,18 +80,17 @@ func resourceAssessmentTargetRead(ctx context.Context, d *schema.ResourceData, m
var diags diag.Diagnostics
conn := meta.(*conns.AWSClient).InspectorClient(ctx)

assessmentTarget, err := DescribeAssessmentTarget(ctx, conn, d.Id())

if err != nil {
return sdkdiag.AppendErrorf(diags, "describing Inspector Classic Assessment Target (%s): %s", d.Id(), err)
}

if assessmentTarget == nil {
assessmentTarget, err := FindAssessmentTargetByID(ctx, conn, d.Id())
if errs.IsA[*retry.NotFoundError](err) {
log.Printf("[WARN] Inspector Classic Assessment Target (%s) not found, removing from state", d.Id())
d.SetId("")
return diags
}

if err != nil {
return sdkdiag.AppendErrorf(diags, "describing Inspector Classic Assessment Target (%s): %s", d.Id(), err)
}

d.Set(names.AttrARN, assessmentTarget.Arn)
d.Set(names.AttrName, assessmentTarget.Name)
d.Set("resource_group_arn", assessmentTarget.ResourceGroupArn)
Expand Down Expand Up @@ -144,7 +147,7 @@ func resourceAssessmentTargetDelete(ctx context.Context, d *schema.ResourceData,
return diags
}

func DescribeAssessmentTarget(ctx context.Context, conn *inspector.Client, arn string) (*awstypes.AssessmentTarget, error) {
func FindAssessmentTargetByID(ctx context.Context, conn *inspector.Client, arn string) (*awstypes.AssessmentTarget, error) {
input := &inspector.DescribeAssessmentTargetsInput{
AssessmentTargetArns: []string{arn},
}
Expand All @@ -159,13 +162,13 @@ func DescribeAssessmentTarget(ctx context.Context, conn *inspector.Client, arn s
return nil, err
}

var assessmentTarget awstypes.AssessmentTarget
for _, target := range output.AssessmentTargets {
if aws.ToString(target.Arn) == arn {
assessmentTarget = target
break
return &target, nil
}
}

return &assessmentTarget, nil
return nil, &retry.NotFoundError{
LastRequest: input,
}
}
25 changes: 12 additions & 13 deletions internal/service/inspector/assessment_target_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,21 @@ package inspector_test

import (
"context"
"errors"
"fmt"
"testing"

"github.com/YakDriver/regexache"
"github.com/aws/aws-sdk-go-v2/service/inspector"
awstypes "github.com/aws/aws-sdk-go-v2/service/inspector/types"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry"
sdkacctest "github.com/hashicorp/terraform-plugin-testing/helper/acctest"
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
"github.com/hashicorp/terraform-plugin-testing/terraform"
"github.com/hashicorp/terraform-provider-aws/internal/acctest"
"github.com/hashicorp/terraform-provider-aws/internal/conns"
"github.com/hashicorp/terraform-provider-aws/internal/create"
"github.com/hashicorp/terraform-provider-aws/internal/errs"
tfinspector "github.com/hashicorp/terraform-provider-aws/internal/service/inspector"
"github.com/hashicorp/terraform-provider-aws/names"
)
Expand Down Expand Up @@ -170,15 +174,15 @@ func testAccCheckTargetAssessmentDestroy(ctx context.Context) resource.TestCheck
continue
}

assessmentTarget, err := tfinspector.DescribeAssessmentTarget(ctx, conn, rs.Primary.ID)

_, err := tfinspector.FindAssessmentTargetByID(ctx, conn, rs.Primary.ID)
if errs.IsA[*retry.NotFoundError](err) {
return nil
}
if err != nil {
return fmt.Errorf("finding Inspector Classic Assessment Target: %s", err)
return create.Error(names.Inspector, create.ErrActionCheckingDestroyed, tfinspector.ResNameAssessmentTarget, rs.Primary.ID, err)
}

if assessmentTarget != nil {
return fmt.Errorf("Inspector Classic Assessment Target (%s) still exists", rs.Primary.ID)
}
return create.Error(names.Inspector, create.ErrActionCheckingDestroyed, tfinspector.ResNameAssessmentTarget, rs.Primary.ID, errors.New("not destroyed"))
}

return nil
Expand All @@ -194,14 +198,9 @@ func testAccCheckTargetExists(ctx context.Context, name string, target *awstypes

conn := acctest.Provider.Meta().(*conns.AWSClient).InspectorClient(ctx)

assessmentTarget, err := tfinspector.DescribeAssessmentTarget(ctx, conn, rs.Primary.ID)

assessmentTarget, err := tfinspector.FindAssessmentTargetByID(ctx, conn, rs.Primary.ID)
if err != nil {
return fmt.Errorf("finding Inspector Classic Assessment Target: %s", err)
}

if assessmentTarget == nil {
return fmt.Errorf("Inspector Classic Assessment Target (%s) not found", rs.Primary.ID)
return create.Error(names.Inspector, create.ErrActionCheckingExistence, tfinspector.ResNameAssessmentTarget, rs.Primary.ID, err)
}

*target = *assessmentTarget
Expand Down

0 comments on commit a6c55ab

Please sign in to comment.