Skip to content

Commit

Permalink
Merge pull request #31853 from brittandeyoung/td-lightsail-aws-go-sdk-v2
Browse files Browse the repository at this point in the history
TechDebt: Migrate `lightsail` service to `aws-go-sdk-v2`
  • Loading branch information
ewbankkit authored Jun 12, 2023
2 parents 9586ff1 + 945ccee commit 4dccf99
Show file tree
Hide file tree
Showing 60 changed files with 1,808 additions and 1,691 deletions.
1 change: 1 addition & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ require (
github.com/aws/aws-sdk-go-v2/service/ivschat v1.4.5
github.com/aws/aws-sdk-go-v2/service/kendra v1.40.2
github.com/aws/aws-sdk-go-v2/service/lambda v1.35.0
github.com/aws/aws-sdk-go-v2/service/lightsail v1.26.6
github.com/aws/aws-sdk-go-v2/service/medialive v1.31.4
github.com/aws/aws-sdk-go-v2/service/oam v1.1.11
github.com/aws/aws-sdk-go-v2/service/opensearchserverless v1.2.4
Expand Down
2 changes: 2 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,8 @@ github.com/aws/aws-sdk-go-v2/service/kendra v1.40.2 h1:4oiWp0Y9BnBh0x7V4/h3u/qna
github.com/aws/aws-sdk-go-v2/service/kendra v1.40.2/go.mod h1:00b/aokrZ0r4fUsMP9RSOL9bvxTCCRCOeUy5o0lyqrA=
github.com/aws/aws-sdk-go-v2/service/lambda v1.35.0 h1:iNLsDIOju/bbqw0mNaEXh+9Ms6Mm0RjcHPP9z4k9lUY=
github.com/aws/aws-sdk-go-v2/service/lambda v1.35.0/go.mod h1:i23nHcGEyswthctBfhEO1agGpM5Uyh83aSmSB6DmdCk=
github.com/aws/aws-sdk-go-v2/service/lightsail v1.26.6 h1:QQE/ZcXSrPFGprrG8VFblHiMpenvzICT09YnaMmQEwk=
github.com/aws/aws-sdk-go-v2/service/lightsail v1.26.6/go.mod h1:L+JqH2pSCvKnCVJNKnU/8TTUfuNuTXSmXiS3F0zMvzQ=
github.com/aws/aws-sdk-go-v2/service/medialive v1.31.4 h1:EMIWrz5dNgkqAKUPe6xTLvzwLt2RIRN1P5D8Nrl4XkQ=
github.com/aws/aws-sdk-go-v2/service/medialive v1.31.4/go.mod h1:3Ttv/NVxQ8CitwL/sZdxSJHzStb75XQO+gvBwOC3Sj8=
github.com/aws/aws-sdk-go-v2/service/oam v1.1.11 h1:dRgn7qpyEtXcP0prnPyaTUTiCQsowO++Cu9B5wlZRtI=
Expand Down
8 changes: 4 additions & 4 deletions internal/conns/awsclient_gen.go

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

41 changes: 26 additions & 15 deletions internal/conns/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,12 @@ import (
"context"
"log"
"strings"
"time"

awsv2 "github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/aws/retry"
"github.com/aws/aws-sdk-go-v2/feature/ec2/imds"
"github.com/aws/aws-sdk-go-v2/service/lightsail"
"github.com/aws/aws-sdk-go-v2/service/route53domains"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/endpoints"
Expand All @@ -25,7 +28,6 @@ import (
"github.com/aws/aws-sdk-go/service/globalaccelerator"
"github.com/aws/aws-sdk-go/service/kafka"
"github.com/aws/aws-sdk-go/service/kinesis"
"github.com/aws/aws-sdk-go/service/lightsail"
"github.com/aws/aws-sdk-go/service/organizations"
"github.com/aws/aws-sdk-go/service/route53"
"github.com/aws/aws-sdk-go/service/route53recoverycontrolconfig"
Expand All @@ -46,6 +48,10 @@ import (
"github.com/hashicorp/terraform-provider-aws/names"
)

const (
tenBackOff = 10
)

type Config struct {
AccessKey string
AllowedAccountIds []string
Expand Down Expand Up @@ -460,20 +466,6 @@ func (c *Config) ConfigureProvider(ctx context.Context, client *AWSClient) (*AWS
}
})

client.lightsailConn.Handlers.Retry.PushBack(func(r *request.Request) {
switch r.Operation.Name {
case "CreateContainerService", "UpdateContainerService", "CreateContainerServiceDeployment":
if tfawserr.ErrMessageContains(r.Error, lightsail.ErrCodeInvalidInputException, "Please try again in a few minutes") {
r.Retryable = aws.Bool(true)
}
case "DeleteContainerService":
if tfawserr.ErrMessageContains(r.Error, lightsail.ErrCodeInvalidInputException, "Please try again in a few minutes") ||
tfawserr.ErrMessageContains(r.Error, lightsail.ErrCodeInvalidInputException, "Please wait for it to complete before trying again") {
r.Retryable = aws.Bool(true)
}
}
})

client.organizationsConn.Handlers.Retry.PushBack(func(r *request.Request) {
// Retry on the following error:
// ConcurrentModificationException: AWS Organizations can't complete your request because it conflicts with another attempt to modify the same entity. Try again later.
Expand Down Expand Up @@ -546,5 +538,24 @@ func (c *Config) ConfigureProvider(ctx context.Context, client *AWSClient) (*AWS
}
})

client.lightsailClient = lightsail.NewFromConfig(cfg, func(o *lightsail.Options) {
lightsailRetryable := retry.IsErrorRetryableFunc(func(e error) awsv2.Ternary {
if strings.Contains(e.Error(), "Please try again in a few minutes") || strings.Contains(e.Error(), "Please wait for it to complete before trying again") {
return awsv2.TrueTernary
}
return awsv2.UnknownTernary
})

if endpoint := c.Endpoints[names.Lightsail]; endpoint != "" {
o.EndpointResolver = lightsail.EndpointResolverFromURL(endpoint)
}

o.Retryer = retry.NewStandard(func(options *retry.StandardOptions) {
options.Retryables = append(options.Retryables, lightsailRetryable)
options.MaxAttempts = 18
options.Backoff = retry.NewExponentialJitterBackoff(time.Second * tenBackOff)
})
})

return client, nil
}
2 changes: 0 additions & 2 deletions internal/conns/config_gen.go

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

62 changes: 43 additions & 19 deletions internal/service/lightsail/bucket.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,15 @@ import (
"context"
"time"

"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/service/lightsail"
"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/lightsail"
"github.com/aws/aws-sdk-go-v2/service/lightsail/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/create"
"github.com/hashicorp/terraform-provider-aws/internal/errs"
tftags "github.com/hashicorp/terraform-provider-aws/internal/tags"
"github.com/hashicorp/terraform-provider-aws/internal/tfresource"
"github.com/hashicorp/terraform-provider-aws/internal/verify"
Expand Down Expand Up @@ -71,22 +73,22 @@ func ResourceBucket() *schema.Resource {
}

func resourceBucketCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
conn := meta.(*conns.AWSClient).LightsailConn(ctx)
conn := meta.(*conns.AWSClient).LightsailClient(ctx)

in := lightsail.CreateBucketInput{
BucketName: aws.String(d.Get("name").(string)),
BundleId: aws.String(d.Get("bundle_id").(string)),
Tags: GetTagsIn(ctx),
}

out, err := conn.CreateBucketWithContext(ctx, &in)
out, err := conn.CreateBucket(ctx, &in)

if err != nil {
return create.DiagError(names.Lightsail, lightsail.OperationTypeCreateBucket, ResBucket, d.Get("name").(string), err)
return create.DiagError(names.Lightsail, string(types.OperationTypeCreateBucket), ResBucket, d.Get("name").(string), err)
}

id := d.Get("name").(string)
diag := expandOperations(ctx, conn, out.Operations, lightsail.OperationTypeCreateBucket, ResBucket, id)
diag := expandOperations(ctx, conn, out.Operations, types.OperationTypeCreateBucket, ResBucket, id)

if diag != nil {
return diag
Expand All @@ -98,18 +100,18 @@ func resourceBucketCreate(ctx context.Context, d *schema.ResourceData, meta inte
}

func resourceBucketRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
conn := meta.(*conns.AWSClient).LightsailConn(ctx)
conn := meta.(*conns.AWSClient).LightsailClient(ctx)

out, err := FindBucketById(ctx, conn, d.Id())

if !d.IsNewResource() && tfresource.NotFound(err) {
create.LogNotFoundRemoveState(names.CE, create.ErrActionReading, ResBucket, d.Id())
create.LogNotFoundRemoveState(names.Lightsail, create.ErrActionReading, ResBucket, d.Id())
d.SetId("")
return nil
}

if err != nil {
return create.DiagError(names.CE, create.ErrActionReading, ResBucket, d.Id(), err)
return create.DiagError(names.Lightsail, create.ErrActionReading, ResBucket, d.Id(), err)
}

d.Set("arn", out.Arn)
Expand All @@ -127,20 +129,20 @@ func resourceBucketRead(ctx context.Context, d *schema.ResourceData, meta interf
}

func resourceBucketUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
conn := meta.(*conns.AWSClient).LightsailConn(ctx)
conn := meta.(*conns.AWSClient).LightsailClient(ctx)

if d.HasChange("bundle_id") {
in := lightsail.UpdateBucketBundleInput{
BucketName: aws.String(d.Id()),
BundleId: aws.String(d.Get("bundle_id").(string)),
}
out, err := conn.UpdateBucketBundleWithContext(ctx, &in)
out, err := conn.UpdateBucketBundle(ctx, &in)

if err != nil {
return create.DiagError(names.Lightsail, lightsail.OperationTypeUpdateBucket, ResBucket, d.Get("name").(string), err)
return create.DiagError(names.Lightsail, string(types.OperationTypeUpdateBucket), ResBucket, d.Get("name").(string), err)
}

diag := expandOperations(ctx, conn, out.Operations, lightsail.OperationTypeUpdateBucket, ResBucket, d.Get("name").(string))
diag := expandOperations(ctx, conn, out.Operations, types.OperationTypeUpdateBucket, ResBucket, d.Get("name").(string))

if diag != nil {
return diag
Expand All @@ -151,24 +153,46 @@ func resourceBucketUpdate(ctx context.Context, d *schema.ResourceData, meta inte
}

func resourceBucketDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
conn := meta.(*conns.AWSClient).LightsailConn(ctx)
out, err := conn.DeleteBucketWithContext(ctx, &lightsail.DeleteBucketInput{
conn := meta.(*conns.AWSClient).LightsailClient(ctx)
out, err := conn.DeleteBucket(ctx, &lightsail.DeleteBucketInput{
BucketName: aws.String(d.Id()),
})

if err != nil && tfawserr.ErrCodeEquals(err, lightsail.ErrCodeNotFoundException) {
if err != nil && errs.IsA[*types.NotFoundException](err) {
return nil
}

if err != nil {
return create.DiagError(names.CE, create.ErrActionDeleting, ResBucket, d.Id(), err)
return create.DiagError(names.Lightsail, create.ErrActionDeleting, ResBucket, d.Id(), err)
}

diag := expandOperations(ctx, conn, out.Operations, lightsail.OperationTypeDeleteBucket, ResBucket, d.Id())
diag := expandOperations(ctx, conn, out.Operations, types.OperationTypeDeleteBucket, ResBucket, d.Id())

if diag != nil {
return diag
}

return nil
}

func FindBucketById(ctx context.Context, conn *lightsail.Client, id string) (*types.Bucket, error) {
in := &lightsail.GetBucketsInput{BucketName: aws.String(id)}
out, err := conn.GetBuckets(ctx, in)

if IsANotFoundError(err) {
return nil, &retry.NotFoundError{
LastError: err,
LastRequest: in,
}
}

if err != nil {
return nil, err
}

if out == nil || len(out.Buckets) == 0 {
return nil, tfresource.NewEmptyResultError(in)
}

return &out.Buckets[0], nil
}
Loading

0 comments on commit 4dccf99

Please sign in to comment.