Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixes QuickSight sweepers when account not signed up for QuickSight #32323

Merged
merged 1 commit into from
Jun 30, 2023
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
112 changes: 60 additions & 52 deletions internal/service/quicksight/sweep.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import (

"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/service/quicksight"
"github.com/hashicorp/go-multierror"
"github.com/hashicorp/aws-sdk-go-base/v2/awsv1shim/v2/tfawserr"
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
"github.com/hashicorp/terraform-provider-aws/internal/sweep"
)
Expand Down Expand Up @@ -57,7 +57,6 @@ func sweepDashboards(region string) error {

conn := client.QuickSightConn(ctx)
sweepResources := make([]sweep.Sweepable, 0)
var errs *multierror.Error

awsAccountId := client.AccountID

Expand Down Expand Up @@ -85,20 +84,19 @@ func sweepDashboards(region string) error {
return !lastPage
})

if skipSweepError(err) {
log.Printf("[WARN] Skipping QuickSight Dashboard sweep for %s: %s", region, err)
return nil
}
if err != nil {
errs = multierror.Append(errs, fmt.Errorf("listing QuickSight Dashboards: %w", err))
return fmt.Errorf("listing QuickSight Dashboards: %w", err)
}

if err := sweep.SweepOrchestratorWithContext(ctx, sweepResources); err != nil {
errs = multierror.Append(errs, fmt.Errorf("sweeping QuickSight Dashboards for %s: %w", region, err))
}

if sweep.SkipSweepError(errs.ErrorOrNil()) {
log.Printf("[WARN] Skipping QuickSight Dashboard sweep for %s: %s", region, errs)
return nil
return fmt.Errorf("sweeping QuickSight Dashboards for %s: %w", region, err)
}

return errs.ErrorOrNil()
return nil
}

func sweepDataSets(region string) error {
Expand All @@ -111,7 +109,6 @@ func sweepDataSets(region string) error {

conn := client.QuickSightConn(ctx)
sweepResources := make([]sweep.Sweepable, 0)
var errs *multierror.Error

awsAccountId := client.AccountID

Expand Down Expand Up @@ -139,20 +136,19 @@ func sweepDataSets(region string) error {
return !lastPage
})

if skipSweepError(err) {
log.Printf("[WARN] Skipping QuickSight Data Set sweep for %s: %s", region, err)
return nil
}
if err != nil {
errs = multierror.Append(errs, fmt.Errorf("listing QuickSight Data Sets: %w", err))
return fmt.Errorf("listing QuickSight Data Sets: %w", err)
}

if err := sweep.SweepOrchestratorWithContext(ctx, sweepResources); err != nil {
errs = multierror.Append(errs, fmt.Errorf("sweeping QuickSight Data Sets for %s: %w", region, err))
return fmt.Errorf("sweeping QuickSight Data Sets for %s: %w", region, err)
}

if sweep.SkipSweepError(errs.ErrorOrNil()) {
log.Printf("[WARN] Skipping QuickSight Data Set sweep for %s: %s", region, errs)
return nil
}

return errs.ErrorOrNil()
return nil
}

func sweepDataSources(region string) error {
Expand All @@ -165,7 +161,6 @@ func sweepDataSources(region string) error {

conn := client.QuickSightConn(ctx)
sweepResources := make([]sweep.Sweepable, 0)
var errs *multierror.Error

awsAccountId := client.AccountID

Expand Down Expand Up @@ -193,20 +188,19 @@ func sweepDataSources(region string) error {
return !lastPage
})

if skipSweepError(err) {
log.Printf("[WARN] Skipping QuickSight Data Source sweep for %s: %s", region, err)
return nil
}
if err != nil {
errs = multierror.Append(errs, fmt.Errorf("listing QuickSight Data Sources: %w", err))
return fmt.Errorf("listing QuickSight Data Sources: %w", err)
}

if err := sweep.SweepOrchestratorWithContext(ctx, sweepResources); err != nil {
errs = multierror.Append(errs, fmt.Errorf("sweeping QuickSight Data Sources for %s: %w", region, err))
}

if sweep.SkipSweepError(errs.ErrorOrNil()) {
log.Printf("[WARN] Skipping QuickSight Data Source sweep for %s: %s", region, errs)
return nil
return fmt.Errorf("sweeping QuickSight Data Sources for %s: %w", region, err)
}

return errs.ErrorOrNil()
return nil
}

func sweepFolders(region string) error {
Expand All @@ -220,7 +214,6 @@ func sweepFolders(region string) error {
conn := client.QuickSightConn(ctx)
awsAccountId := client.AccountID
sweepResources := make([]sweep.Sweepable, 0)
var errs *multierror.Error

input := &quicksight.ListFoldersInput{
AwsAccountId: aws.String(awsAccountId),
Expand All @@ -239,20 +232,20 @@ func sweepFolders(region string) error {
sweepResources = append(sweepResources, sweep.NewSweepResource(r, d, client))
}

if skipSweepError(err) {
log.Printf("[WARN] Skipping QuickSight Folder sweep for %s: %s", region, err)
return nil
}
if err != nil {
errs = multierror.Append(errs, fmt.Errorf("listing QuickSight Folder for %s: %w", region, err))
return fmt.Errorf("listing QuickSight Folders: %w", err)
}

if err := sweep.SweepOrchestratorWithContext(ctx, sweepResources); err != nil {
errs = multierror.Append(errs, fmt.Errorf("sweeping QuickSight Folder for %s: %w", region, err))
return fmt.Errorf("sweeping QuickSight Folders for %s: %w", region, err)
}

if sweep.SkipSweepError(err) {
log.Printf("[WARN] Skipping QuickSight Folder sweep for %s: %s", region, errs)
return nil
}
return nil

return errs.ErrorOrNil()
}

func sweepTemplates(region string) error {
Expand All @@ -265,7 +258,6 @@ func sweepTemplates(region string) error {

conn := client.QuickSightConn(ctx)
sweepResources := make([]sweep.Sweepable, 0)
var errs *multierror.Error

awsAccountId := client.AccountID

Expand Down Expand Up @@ -293,20 +285,19 @@ func sweepTemplates(region string) error {
return !lastPage
})

if skipSweepError(err) {
log.Printf("[WARN] Skipping QuickSight Template sweep for %s: %s", region, err)
return nil
}
if err != nil {
errs = multierror.Append(errs, fmt.Errorf("listing QuickSight Templates: %w", err))
return fmt.Errorf("listing QuickSight Templates: %w", err)
}

if err := sweep.SweepOrchestratorWithContext(ctx, sweepResources); err != nil {
errs = multierror.Append(errs, fmt.Errorf("sweeping QuickSight Templates for %s: %w", region, err))
return fmt.Errorf("sweeping QuickSight Templates for %s: %w", region, err)
}

if sweep.SkipSweepError(errs.ErrorOrNil()) {
log.Printf("[WARN] Skipping QuickSight Template sweep for %s: %s", region, errs)
return nil
}

return errs.ErrorOrNil()
return nil
}

func sweepUsers(region string) error {
Expand All @@ -320,7 +311,6 @@ func sweepUsers(region string) error {
conn := client.QuickSightConn(ctx)
awsAccountId := client.AccountID
sweepResources := make([]sweep.Sweepable, 0)
var errs *multierror.Error

input := &quicksight.ListUsersInput{
AwsAccountId: aws.String(awsAccountId),
Expand All @@ -341,18 +331,36 @@ func sweepUsers(region string) error {
sweepResources = append(sweepResources, sweep.NewSweepResource(r, d, client))
}

if skipSweepUserError(err) {
log.Printf("[WARN] Skipping QuickSight User sweep for %s: %s", region, err)
return nil
}
if err != nil {
errs = multierror.Append(errs, fmt.Errorf("listing QuickSight Users for %s: %w", region, err))
return fmt.Errorf("listing QuickSight Users: %w", err)
}

if err := sweep.SweepOrchestratorWithContext(ctx, sweepResources); err != nil {
errs = multierror.Append(errs, fmt.Errorf("sweeping QuickSight Users for %s: %w", region, err))
return fmt.Errorf("sweeping QuickSight Users for %s: %w", region, err)
}

if sweep.SkipSweepError(err) {
log.Printf("[WARN] Skipping QuickSight User sweep for %s: %s", region, errs)
return nil
return nil
}

// skipSweepError adds an additional skippable error code for listing QuickSight resources other than User
func skipSweepError(err error) bool {
if tfawserr.ErrCodeEquals(err, quicksight.ErrCodeUnsupportedUserEditionException) {
return true
}

return sweep.SkipSweepError(err)
}

// skipSweepUserError adds an additional skippable error code for listing QuickSight User resources
func skipSweepUserError(err error) bool {
if tfawserr.ErrMessageContains(err, quicksight.ErrCodeResourceNotFoundException, "not signed up with QuickSight") {
return true
}

return errs.ErrorOrNil()
return sweep.SkipSweepError(err)

}