Skip to content

Commit

Permalink
Merge pull request hashicorp#38420 from mattburgess/inspector-awssdkv…
Browse files Browse the repository at this point in the history
…2-migration

inspector: Migrate to AWS SDK v2
  • Loading branch information
jar-b authored Jul 22, 2024
2 parents ec056f4 + 79d037c commit a3f2a94
Show file tree
Hide file tree
Showing 18 changed files with 388 additions and 296 deletions.
1 change: 1 addition & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,7 @@ require (
github.com/aws/aws-sdk-go-v2/service/healthlake v1.26.3
github.com/aws/aws-sdk-go-v2/service/iam v1.34.3
github.com/aws/aws-sdk-go-v2/service/identitystore v1.25.3
github.com/aws/aws-sdk-go-v2/service/inspector v1.23.3
github.com/aws/aws-sdk-go-v2/service/inspector2 v1.28.3
github.com/aws/aws-sdk-go-v2/service/internetmonitor v1.16.3
github.com/aws/aws-sdk-go-v2/service/iot v1.55.3
Expand Down
2 changes: 2 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -264,6 +264,8 @@ github.com/aws/aws-sdk-go-v2/service/iam v1.34.3 h1:p4L/tixJ3JUIxCteMGT6oMlqCbEv
github.com/aws/aws-sdk-go-v2/service/iam v1.34.3/go.mod h1:rfOWxxwdecWvSC9C2/8K/foW3Blf+aKnIIPP9kQ2DPE=
github.com/aws/aws-sdk-go-v2/service/identitystore v1.25.3 h1:eiL4q6pEzvazErz3gBOoP9hDm3Ul8pV69Qn7BrPARrU=
github.com/aws/aws-sdk-go-v2/service/identitystore v1.25.3/go.mod h1:oNDSqrUg2dofbodrdr9fBzJ6dX8Lkh/2xN7LXXdvr5A=
github.com/aws/aws-sdk-go-v2/service/inspector v1.23.3 h1:PeYP2Fdsdh/M5qDytEwc6wjjrG22MNxD5xFHEosCS2k=
github.com/aws/aws-sdk-go-v2/service/inspector v1.23.3/go.mod h1:vbORvzmTKicdDc7cyWs9vh1YiSUC2PJE/PvvDlfTC2s=
github.com/aws/aws-sdk-go-v2/service/inspector2 v1.28.3 h1:dscyhNwL1v6pYPCflnp8/jBMeCC5y5Vn8npXmM/EE78=
github.com/aws/aws-sdk-go-v2/service/inspector2 v1.28.3/go.mod h1:EI8IxOq2F4KHZQQEB4rmQPXmYILE2avtX6wOiR8A5XQ=
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.3 h1:dT3MqvGhSoaIhRseqw2I0yH81l7wiR2vjs57O51EAm8=
Expand Down
6 changes: 3 additions & 3 deletions internal/conns/awsclient_gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

62 changes: 33 additions & 29 deletions internal/service/inspector/assessment_target.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,14 @@ import (
"log"
"time"

"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/service/inspector"
"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/inspector"
awstypes "github.com/aws/aws-sdk-go-v2/service/inspector/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"
Expand Down Expand Up @@ -49,9 +50,13 @@ 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).InspectorConn(ctx)
conn := meta.(*conns.AWSClient).InspectorClient(ctx)

input := &inspector.CreateAssessmentTargetInput{
AssessmentTargetName: aws.String(d.Get(names.AttrName).(string)),
Expand All @@ -61,32 +66,31 @@ func resourceAssessmentTargetCreate(ctx context.Context, d *schema.ResourceData,
input.ResourceGroupArn = aws.String(v.(string))
}

resp, err := conn.CreateAssessmentTargetWithContext(ctx, input)
resp, err := conn.CreateAssessmentTarget(ctx, input)
if err != nil {
return sdkdiag.AppendErrorf(diags, "creating Inspector Classic Assessment Target: %s", err)
}

d.SetId(aws.StringValue(resp.AssessmentTargetArn))
d.SetId(aws.ToString(resp.AssessmentTargetArn))

return append(diags, resourceAssessmentTargetRead(ctx, d, meta)...)
}

func resourceAssessmentTargetRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
var diags diag.Diagnostics
conn := meta.(*conns.AWSClient).InspectorConn(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)
}
conn := meta.(*conns.AWSClient).InspectorClient(ctx)

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 All @@ -96,7 +100,7 @@ func resourceAssessmentTargetRead(ctx context.Context, d *schema.ResourceData, m

func resourceAssessmentTargetUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
var diags diag.Diagnostics
conn := meta.(*conns.AWSClient).InspectorConn(ctx)
conn := meta.(*conns.AWSClient).InspectorClient(ctx)

input := inspector.UpdateAssessmentTargetInput{
AssessmentTargetArn: aws.String(d.Id()),
Expand All @@ -107,7 +111,7 @@ func resourceAssessmentTargetUpdate(ctx context.Context, d *schema.ResourceData,
input.ResourceGroupArn = aws.String(v.(string))
}

_, err := conn.UpdateAssessmentTargetWithContext(ctx, &input)
_, err := conn.UpdateAssessmentTarget(ctx, &input)
if err != nil {
return sdkdiag.AppendErrorf(diags, "updating Inspector Classic Assessment Target (%s): %s", d.Id(), err)
}
Expand All @@ -117,14 +121,14 @@ func resourceAssessmentTargetUpdate(ctx context.Context, d *schema.ResourceData,

func resourceAssessmentTargetDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
var diags diag.Diagnostics
conn := meta.(*conns.AWSClient).InspectorConn(ctx)
conn := meta.(*conns.AWSClient).InspectorClient(ctx)
input := &inspector.DeleteAssessmentTargetInput{
AssessmentTargetArn: aws.String(d.Id()),
}
err := retry.RetryContext(ctx, 60*time.Minute, func() *retry.RetryError {
_, err := conn.DeleteAssessmentTargetWithContext(ctx, input)
_, err := conn.DeleteAssessmentTarget(ctx, input)

if tfawserr.ErrCodeEquals(err, inspector.ErrCodeAssessmentRunInProgressException) {
if errs.IsA[*awstypes.AssessmentRunInProgressException](err) {
return retry.RetryableError(err)
}

Expand All @@ -135,36 +139,36 @@ func resourceAssessmentTargetDelete(ctx context.Context, d *schema.ResourceData,
return nil
})
if tfresource.TimedOut(err) {
_, err = conn.DeleteAssessmentTargetWithContext(ctx, input)
_, err = conn.DeleteAssessmentTarget(ctx, input)
}
if err != nil {
return sdkdiag.AppendErrorf(diags, "deleting Inspector Classic Assessment Target: %s", err)
}
return diags
}

func DescribeAssessmentTarget(ctx context.Context, conn *inspector.Inspector, arn string) (*inspector.AssessmentTarget, error) {
func FindAssessmentTargetByID(ctx context.Context, conn *inspector.Client, arn string) (*awstypes.AssessmentTarget, error) {
input := &inspector.DescribeAssessmentTargetsInput{
AssessmentTargetArns: []*string{aws.String(arn)},
AssessmentTargetArns: []string{arn},
}

output, err := conn.DescribeAssessmentTargetsWithContext(ctx, input)
output, err := conn.DescribeAssessmentTargets(ctx, input)

if tfawserr.ErrCodeEquals(err, inspector.ErrCodeInvalidInputException) {
if errs.IsA[*awstypes.InvalidInputException](err) {
return nil, nil
}

if err != nil {
return nil, err
}

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

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

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

"github.com/YakDriver/regexache"
"github.com/aws/aws-sdk-go/service/inspector"
"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"
)

func TestAccInspectorAssessmentTarget_basic(t *testing.T) {
ctx := acctest.Context(t)
var assessmentTarget1 inspector.AssessmentTarget
var assessmentTarget1 awstypes.AssessmentTarget
rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix)
resourceName := "aws_inspector_assessment_target.test"

Expand Down Expand Up @@ -51,7 +56,7 @@ func TestAccInspectorAssessmentTarget_basic(t *testing.T) {

func TestAccInspectorAssessmentTarget_disappears(t *testing.T) {
ctx := acctest.Context(t)
var assessmentTarget1 inspector.AssessmentTarget
var assessmentTarget1 awstypes.AssessmentTarget
rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix)
resourceName := "aws_inspector_assessment_target.test"

Expand All @@ -75,7 +80,7 @@ func TestAccInspectorAssessmentTarget_disappears(t *testing.T) {

func TestAccInspectorAssessmentTarget_name(t *testing.T) {
ctx := acctest.Context(t)
var assessmentTarget1, assessmentTarget2 inspector.AssessmentTarget
var assessmentTarget1, assessmentTarget2 awstypes.AssessmentTarget
rName1 := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix)
rName2 := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix)
resourceName := "aws_inspector_assessment_target.test"
Expand Down Expand Up @@ -111,7 +116,7 @@ func TestAccInspectorAssessmentTarget_name(t *testing.T) {

func TestAccInspectorAssessmentTarget_resourceGroupARN(t *testing.T) {
ctx := acctest.Context(t)
var assessmentTarget1, assessmentTarget2, assessmentTarget3, assessmentTarget4 inspector.AssessmentTarget
var assessmentTarget1, assessmentTarget2, assessmentTarget3, assessmentTarget4 awstypes.AssessmentTarget
rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix)
inspectorResourceGroupResourceName1 := "aws_inspector_resource_group.test1"
inspectorResourceGroupResourceName2 := "aws_inspector_resource_group.test2"
Expand Down Expand Up @@ -162,45 +167,40 @@ func TestAccInspectorAssessmentTarget_resourceGroupARN(t *testing.T) {

func testAccCheckTargetAssessmentDestroy(ctx context.Context) resource.TestCheckFunc {
return func(s *terraform.State) error {
conn := acctest.Provider.Meta().(*conns.AWSClient).InspectorConn(ctx)
conn := acctest.Provider.Meta().(*conns.AWSClient).InspectorClient(ctx)

for _, rs := range s.RootModule().Resources {
if rs.Type != "aws_inspector_assessment_target" {
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
}
}

func testAccCheckTargetExists(ctx context.Context, name string, target *inspector.AssessmentTarget) resource.TestCheckFunc {
func testAccCheckTargetExists(ctx context.Context, name string, target *awstypes.AssessmentTarget) resource.TestCheckFunc {
return func(s *terraform.State) error {
rs, ok := s.RootModule().Resources[name]
if !ok {
return fmt.Errorf("Not found: %s", name)
}

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

assessmentTarget, err := tfinspector.DescribeAssessmentTarget(ctx, conn, rs.Primary.ID)
conn := acctest.Provider.Meta().(*conns.AWSClient).InspectorClient(ctx)

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 All @@ -209,15 +209,15 @@ func testAccCheckTargetExists(ctx context.Context, name string, target *inspecto
}
}

func testAccCheckTargetDisappears(ctx context.Context, assessmentTarget *inspector.AssessmentTarget) resource.TestCheckFunc {
func testAccCheckTargetDisappears(ctx context.Context, assessmentTarget *awstypes.AssessmentTarget) resource.TestCheckFunc {
return func(s *terraform.State) error {
conn := acctest.Provider.Meta().(*conns.AWSClient).InspectorConn(ctx)
conn := acctest.Provider.Meta().(*conns.AWSClient).InspectorClient(ctx)

input := &inspector.DeleteAssessmentTargetInput{
AssessmentTargetArn: assessmentTarget.Arn,
}

_, err := conn.DeleteAssessmentTargetWithContext(ctx, input)
_, err := conn.DeleteAssessmentTarget(ctx, input)

return err
}
Expand Down
Loading

0 comments on commit a3f2a94

Please sign in to comment.