Skip to content

Commit

Permalink
Merge pull request #34738 from AliAllomani/ram-associations-pagination
Browse files Browse the repository at this point in the history
Adding pagination support for RAM GetResourceShareAssociation
  • Loading branch information
ewbankkit authored Jan 11, 2024
2 parents 9d92d8e + 66d49dc commit 11ec582
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 4 deletions.
3 changes: 3 additions & 0 deletions .changelog/34738.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
```release-note:bug
resource/aws_ram_principal_association: Fix `reading RAM Resource Share (...) Principal Association (...): couldn't find resource (21 retries)` errors when a high number of principals are associated with a resource share
```
40 changes: 36 additions & 4 deletions internal/service/ram/find.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (

"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/service/ram"
"github.com/hashicorp/aws-sdk-go-base/v2/awsv1shim/v2/tfawserr"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry"
"github.com/hashicorp/terraform-provider-aws/internal/tfresource"
)
Expand Down Expand Up @@ -140,15 +141,46 @@ func FindResourceSharePrincipalAssociationByShareARNPrincipal(ctx context.Contex
ResourceShareArns: aws.StringSlice([]string{resourceShareARN}),
}

output, err := conn.GetResourceShareAssociationsWithContext(ctx, input)
return findResourceShareAssociation(ctx, conn, input)
}

func findResourceShareAssociation(ctx context.Context, conn *ram.RAM, input *ram.GetResourceShareAssociationsInput) (*ram.ResourceShareAssociation, error) {
output, err := findResourceShareAssociations(ctx, conn, input)

if err != nil {
return nil, err
}

if output == nil || len(output.ResourceShareAssociations) == 0 || output.ResourceShareAssociations[0] == nil {
return nil, nil
return tfresource.AssertSinglePtrResult(output)
}

func findResourceShareAssociations(ctx context.Context, conn *ram.RAM, input *ram.GetResourceShareAssociationsInput) ([]*ram.ResourceShareAssociation, error) {
var output []*ram.ResourceShareAssociation

err := conn.GetResourceShareAssociationsPagesWithContext(ctx, input, func(page *ram.GetResourceShareAssociationsOutput, lastPage bool) bool {
if page == nil {
return !lastPage
}

for _, v := range page.ResourceShareAssociations {
if v != nil {
output = append(output, v)
}
}

return !lastPage
})

if tfawserr.ErrCodeEquals(err, ram.ErrCodeUnknownResourceException) {
return nil, &retry.NotFoundError{
LastError: err,
LastRequest: input,
}
}

if err != nil {
return nil, err
}

return output.ResourceShareAssociations[0], nil
return output, nil
}

0 comments on commit 11ec582

Please sign in to comment.