Skip to content

Commit

Permalink
ssoadmin(sweeper): upgrade aws sdk client
Browse files Browse the repository at this point in the history
  • Loading branch information
jar-b committed Nov 30, 2023
1 parent c795399 commit 91b4f82
Showing 1 changed file with 56 additions and 78 deletions.
134 changes: 56 additions & 78 deletions internal/service/ssoadmin/sweep.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,13 @@ import (
"log"

"github.com/YakDriver/regexache"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/service/ssoadmin"
"github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/service/ssoadmin"
awstypes "github.com/aws/aws-sdk-go-v2/service/ssoadmin/types"
"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/internal/sweep/sdk"
)

Expand All @@ -38,7 +39,7 @@ func sweepAccountAssignments(region string) error {
if err != nil {
return fmt.Errorf("error getting client: %w", err)
}
conn := client.SSOAdminConn(ctx)
conn := client.SSOAdminClient(ctx)

sweepResources := make([]sweep.Sweepable, 0)
var sweeperErrs *multierror.Error
Expand Down Expand Up @@ -67,68 +68,55 @@ func sweepAccountAssignments(region string) error {
InstanceArn: aws.String(instanceArn),
}

err = conn.ListPermissionSetsPagesWithContext(ctx, input, func(page *ssoadmin.ListPermissionSetsOutput, lastPage bool) bool {
if page == nil {
return !lastPage
var permissionSetArns []string
paginator := ssoadmin.NewListPermissionSetsPaginator(conn, input)
for paginator.HasMorePages() {
page, err := paginator.NextPage(ctx)
if awsv2.SkipSweepError(err) {
log.Printf("[WARN] Skipping SSO Account Assignment sweep for %s: %s", region, err)
return sweeperErrs.ErrorOrNil() // In case we have completed some pages, but had errors
}
if err != nil {
sweeperErrs = multierror.Append(sweeperErrs, fmt.Errorf("error retrieving SSO Permission Sets for Account Assignment sweep: %w", err))
}

for _, permissionSet := range page.PermissionSets {
if permissionSet == nil {
continue
}

permissionSetArn := aws.StringValue(permissionSet)

input := &ssoadmin.ListAccountAssignmentsInput{
AccountId: aws.String(client.AccountID),
InstanceArn: aws.String(instanceArn),
PermissionSetArn: permissionSet,
}

err := conn.ListAccountAssignmentsPagesWithContext(ctx, input, func(page *ssoadmin.ListAccountAssignmentsOutput, lastPage bool) bool {
if page == nil {
return !lastPage
}

for _, a := range page.AccountAssignments {
if a == nil {
continue
}

principalID := aws.StringValue(a.PrincipalId)
principalType := aws.StringValue(a.PrincipalType)
targetID := aws.StringValue(a.AccountId)
targetType := ssoadmin.TargetTypeAwsAccount // only valid value currently accepted by API

r := ResourceAccountAssignment()
d := r.Data(nil)
d.SetId(fmt.Sprintf("%s,%s,%s,%s,%s,%s", principalID, principalType, targetID, targetType, permissionSetArn, instanceArn))

sweepResources = append(sweepResources, sweep.NewSweepResource(r, d, client))
}
if page != nil {
permissionSetArns = append(permissionSetArns, page.PermissionSets...)
}
}

return !lastPage
})
for _, permissionSetArn := range permissionSetArns {
input := &ssoadmin.ListAccountAssignmentsInput{
AccountId: aws.String(client.AccountID),
InstanceArn: aws.String(instanceArn),
PermissionSetArn: aws.String(permissionSetArn),
}

if awsv1.SkipSweepError(err) {
paginator := ssoadmin.NewListAccountAssignmentsPaginator(conn, input)
for paginator.HasMorePages() {
page, err := paginator.NextPage(ctx)
if awsv2.SkipSweepError(err) {
log.Printf("[WARN] Skipping SSO Account Assignment sweep (PermissionSet %s) for %s: %s", permissionSetArn, region, err)
continue
}
if err != nil {
sweeperErrs = multierror.Append(sweeperErrs, fmt.Errorf("error retrieving SSO Account Assignments for Permission Set (%s): %w", permissionSetArn, err))
}
}

return !lastPage
})
}
for _, a := range page.AccountAssignments {
principalID := aws.ToString(a.PrincipalId)
principalType := string(a.PrincipalType)
targetID := aws.ToString(a.AccountId)
targetType := awstypes.TargetTypeAwsAccount // only valid value currently accepted by API

if awsv1.SkipSweepError(err) {
log.Printf("[WARN] Skipping SSO Account Assignment sweep for %s: %s", region, err)
return sweeperErrs.ErrorOrNil() // In case we have completed some pages, but had errors
}
if err != nil {
sweeperErrs = multierror.Append(sweeperErrs, fmt.Errorf("error retrieving SSO Permission Sets for Account Assignment sweep: %w", err))
r := ResourceAccountAssignment()
d := r.Data(nil)
d.SetId(fmt.Sprintf("%s,%s,%s,%s,%s,%s", principalID, principalType, targetID, targetType, permissionSetArn, instanceArn))

sweepResources = append(sweepResources, sweep.NewSweepResource(r, d, client))
}
}
}
}

if err := sweep.SweepOrchestrator(ctx, sweepResources); err != nil {
Expand All @@ -144,7 +132,7 @@ func sweepPermissionSets(region string) error {
if err != nil {
return fmt.Errorf("error getting client: %w", err)
}
conn := client.SSOAdminConn(ctx)
conn := client.SSOAdminClient(ctx)

sweepResources := make([]sweep.Sweepable, 0)
var sweeperErrs *multierror.Error
Expand All @@ -171,37 +159,27 @@ func sweepPermissionSets(region string) error {
InstanceArn: aws.String(instanceArn),
}

err = conn.ListPermissionSetsPagesWithContext(ctx, input, func(page *ssoadmin.ListPermissionSetsOutput, lastPage bool) bool {
if page == nil {
return !lastPage
paginator := ssoadmin.NewListPermissionSetsPaginator(conn, input)
for paginator.HasMorePages() {
page, err := paginator.NextPage(ctx)
if awsv2.SkipSweepError(err) {
log.Printf("[WARN] Skipping SSO Permission Set sweep for %s: %s", region, err)
return sweeperErrs.ErrorOrNil() // In case we have completed some pages, but had errors
}
if err != nil {
sweeperErrs = multierror.Append(sweeperErrs, fmt.Errorf("error retrieving SSO Permission Sets: %w", err))
}

for _, permissionSet := range page.PermissionSets {
if permissionSet == nil {
continue
}

arn := aws.StringValue(permissionSet)

log.Printf("[INFO] Deleting SSO Permission Set: %s", arn)
for _, permissionSetArn := range page.PermissionSets {
log.Printf("[INFO] Deleting SSO Permission Set: %s", permissionSetArn)

r := ResourcePermissionSet()
d := r.Data(nil)
d.SetId(fmt.Sprintf("%s,%s", arn, instanceArn))
d.SetId(fmt.Sprintf("%s,%s", permissionSetArn, instanceArn))

sweepResources = append(sweepResources, sweep.NewSweepResource(r, d, client))
}

return !lastPage
})
}

if awsv1.SkipSweepError(err) {
log.Printf("[WARN] Skipping SSO Permission Set sweep for %s: %s", region, err)
return sweeperErrs.ErrorOrNil() // In case we have completed some pages, but had errors
}
if err != nil {
sweeperErrs = multierror.Append(sweeperErrs, fmt.Errorf("error retrieving SSO Permission Sets: %w", err))
}
}

if err := sweep.SweepOrchestrator(ctx, sweepResources); err != nil {
Expand Down

0 comments on commit 91b4f82

Please sign in to comment.