From c883021dde965b62f649f0aa44f93d441bc039d2 Mon Sep 17 00:00:00 2001 From: Jared Baker Date: Wed, 10 May 2023 15:51:34 -0400 Subject: [PATCH 1/4] r/aws_quicksight_folder: add sweeper --- internal/service/quicksight/sweep.go | 56 ++++++++++++++++++++++++++-- 1 file changed, 52 insertions(+), 4 deletions(-) diff --git a/internal/service/quicksight/sweep.go b/internal/service/quicksight/sweep.go index 5a7c6c0e9954..d26e69b40529 100644 --- a/internal/service/quicksight/sweep.go +++ b/internal/service/quicksight/sweep.go @@ -18,11 +18,15 @@ import ( func init() { resource.AddTestSweepers("aws_quicksight_data_source", &resource.Sweeper{ Name: "aws_quicksight_data_source", - F: sweepsDataSource, + F: sweepDataSources, + }) + resource.AddTestSweepers("aws_quicksight_folder", &resource.Sweeper{ + Name: "aws_quicksight_folder", + F: sweepFolders, }) } -func sweepsDataSource(region string) error { +func sweepDataSources(region string) error { ctx := sweep.Context(region) client, err := sweep.SharedRegionalSweepClient(region) @@ -51,9 +55,7 @@ func sweepsDataSource(region string) error { } r := ResourceDataSource() - d := r.Data(nil) - d.SetId(fmt.Sprintf("%s/%s", awsAccountId, aws.StringValue(ds.DataSourceId))) sweepResources = append(sweepResources, sweep.NewSweepResource(r, d, client)) @@ -77,3 +79,49 @@ func sweepsDataSource(region string) error { return errs.ErrorOrNil() } + +func sweepFolders(region string) error { + ctx := sweep.Context(region) + client, err := sweep.SharedRegionalSweepClient(region) + + if err != nil { + return fmt.Errorf("getting client: %w", err) + } + + conn := client.(*conns.AWSClient).QuickSightConn() + awsAccountId := client.(*conns.AWSClient).AccountID + sweepResources := make([]sweep.Sweepable, 0) + var errs *multierror.Error + + input := &quicksight.ListFoldersInput{ + AwsAccountId: aws.String(awsAccountId), + } + + out, err := conn.ListFoldersWithContext(ctx, input) + for _, folder := range out.FolderSummaryList { + if folder.FolderId == nil { + continue + } + + r := ResourceFolder() + d := r.Data(nil) + d.SetId(fmt.Sprintf("%s,%s", awsAccountId, aws.StringValue(folder.FolderId))) + + sweepResources = append(sweepResources, sweep.NewSweepResource(r, d, client)) + } + + if err != nil { + errs = multierror.Append(errs, fmt.Errorf("listing QuickSight Folder for %s: %w", region, err)) + } + + if err := sweep.SweepOrchestrator(sweepResources); err != nil { + errs = multierror.Append(errs, fmt.Errorf("sweeping QuickSight Folder for %s: %w", region, err)) + } + + if sweep.SkipSweepError(err) { + log.Printf("[WARN] Skipping QuickSight Folder sweep for %s: %s", region, errs) + return nil + } + + return errs.ErrorOrNil() +} From db0886b0af6cd5c5e0e7a3a939ff9733ed90ecf9 Mon Sep 17 00:00:00 2001 From: Jared Baker Date: Wed, 10 May 2023 16:41:01 -0400 Subject: [PATCH 2/4] r/aws_quicksight_data_set: add sweeper --- internal/service/quicksight/data_set.go | 7 +-- internal/service/quicksight/sweep.go | 63 ++++++++++++++++++++++++- 2 files changed, 65 insertions(+), 5 deletions(-) diff --git a/internal/service/quicksight/data_set.go b/internal/service/quicksight/data_set.go index 79f36c244408..5672a026f12b 100644 --- a/internal/service/quicksight/data_set.go +++ b/internal/service/quicksight/data_set.go @@ -1112,6 +1112,7 @@ func resourceDataSetUpdate(ctx context.Context, d *schema.ResourceData, meta int func resourceDataSetDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { conn := meta.(*conns.AWSClient).QuickSightConn() + log.Printf("[INFO] Deleting QuickSight Data Set %s", d.Id()) awsAccountId, dataSetId, err := ParseDataSetID(d.Id()) if err != nil { return diag.FromErr(err) @@ -2701,11 +2702,11 @@ func flattenTagRules(apiObject []*quicksight.RowLevelPermissionTagRule) []interf func ParseDataSetID(id string) (string, string, error) { parts := strings.SplitN(id, ",", 2) if len(parts) != 2 || parts[0] == "" || parts[1] == "" { - return "", "", fmt.Errorf("unexpected format of ID (%s), expected AWS_ACCOUNT_ID,DATA_SOURCE_ID", id) + return "", "", fmt.Errorf("unexpected format of ID (%s), expected AWS_ACCOUNT_ID,DATA_SET_ID", id) } return parts[0], parts[1], nil } -func createDataSetID(awsAccountID, dataSourceID string) string { - return fmt.Sprintf("%s,%s", awsAccountID, dataSourceID) +func createDataSetID(awsAccountID, dataSetID string) string { + return fmt.Sprintf("%s,%s", awsAccountID, dataSetID) } diff --git a/internal/service/quicksight/sweep.go b/internal/service/quicksight/sweep.go index d26e69b40529..a7074105e721 100644 --- a/internal/service/quicksight/sweep.go +++ b/internal/service/quicksight/sweep.go @@ -16,6 +16,10 @@ import ( ) func init() { + resource.AddTestSweepers("aws_quicksight_data_set", &resource.Sweeper{ + Name: "aws_quicksight_data_set", + F: sweepDataSets, + }) resource.AddTestSweepers("aws_quicksight_data_source", &resource.Sweeper{ Name: "aws_quicksight_data_source", F: sweepDataSources, @@ -24,6 +28,61 @@ func init() { Name: "aws_quicksight_folder", F: sweepFolders, }) + +} + +func sweepDataSets(region string) error { + ctx := sweep.Context(region) + client, err := sweep.SharedRegionalSweepClient(region) + + if err != nil { + return fmt.Errorf("error getting client: %w", err) + } + + conn := client.(*conns.AWSClient).QuickSightConn() + sweepResources := make([]sweep.Sweepable, 0) + var errs *multierror.Error + + awsAccountId := client.(*conns.AWSClient).AccountID + + input := &quicksight.ListDataSetsInput{ + AwsAccountId: aws.String(awsAccountId), + } + + err = conn.ListDataSetsPagesWithContext(ctx, input, func(page *quicksight.ListDataSetsOutput, lastPage bool) bool { + if page == nil { + return !lastPage + } + + for _, ds := range page.DataSetSummaries { + if ds == nil { + continue + } + + r := ResourceDataSet() + d := r.Data(nil) + d.SetId(fmt.Sprintf("%s,%s", awsAccountId, aws.StringValue(ds.DataSetId))) + + sweepResources = append(sweepResources, sweep.NewSweepResource(r, d, client)) + } + + return !lastPage + }) + + if err != nil { + errs = multierror.Append(errs, 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)) + } + + if sweep.SkipSweepError(errs.ErrorOrNil()) { + log.Printf("[WARN] Skipping QuickSight Data Set sweep for %s: %s", region, errs) + return nil + } + + return errs.ErrorOrNil() } func sweepDataSources(region string) error { @@ -65,11 +124,11 @@ func sweepDataSources(region string) error { }) if err != nil { - errs = multierror.Append(errs, fmt.Errorf("error describing QuickSigth Data Sources: %w", err)) + errs = multierror.Append(errs, fmt.Errorf("listing QuickSight Data Sources: %w", err)) } if err := sweep.SweepOrchestratorWithContext(ctx, sweepResources); err != nil { - errs = multierror.Append(errs, fmt.Errorf("error sweeping QuickSight Data Sources for %s: %w", region, err)) + errs = multierror.Append(errs, fmt.Errorf("sweeping QuickSight Data Sources for %s: %w", region, err)) } if sweep.SkipSweepError(errs.ErrorOrNil()) { From d2c99354637309d4fbb75edf397b80ee5e3f0c44 Mon Sep 17 00:00:00 2001 From: Jared Baker Date: Wed, 10 May 2023 16:42:44 -0400 Subject: [PATCH 3/4] r/aws_quicksight_user: add sweeper --- internal/service/quicksight/sweep.go | 59 +++++++++++++++++++++++++++- 1 file changed, 58 insertions(+), 1 deletion(-) diff --git a/internal/service/quicksight/sweep.go b/internal/service/quicksight/sweep.go index a7074105e721..e883dadee0cd 100644 --- a/internal/service/quicksight/sweep.go +++ b/internal/service/quicksight/sweep.go @@ -6,6 +6,7 @@ package quicksight import ( "fmt" "log" + "strings" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/service/quicksight" @@ -28,9 +29,17 @@ func init() { Name: "aws_quicksight_folder", F: sweepFolders, }) - + resource.AddTestSweepers("aws_quicksight_user", &resource.Sweeper{ + Name: "aws_quicksight_user", + F: sweepUsers, + }) } +const ( + // Defined locally to avoid cyclic import from internal/acctest + acctestResourcePrefix = "tf-acc-test" +) + func sweepDataSets(region string) error { ctx := sweep.Context(region) client, err := sweep.SharedRegionalSweepClient(region) @@ -184,3 +193,51 @@ func sweepFolders(region string) error { return errs.ErrorOrNil() } + +func sweepUsers(region string) error { + ctx := sweep.Context(region) + client, err := sweep.SharedRegionalSweepClient(region) + + if err != nil { + return fmt.Errorf("getting client: %w", err) + } + + conn := client.(*conns.AWSClient).QuickSightConn() + awsAccountId := client.(*conns.AWSClient).AccountID + sweepResources := make([]sweep.Sweepable, 0) + var errs *multierror.Error + + input := &quicksight.ListUsersInput{ + AwsAccountId: aws.String(awsAccountId), + Namespace: aws.String(DefaultUserNamespace), + } + + out, err := conn.ListUsersWithContext(ctx, input) + for _, user := range out.UserList { + username := aws.StringValue(user.UserName) + if !strings.HasPrefix(username, acctestResourcePrefix) { + continue + } + + r := ResourceUser() + d := r.Data(nil) + d.SetId(fmt.Sprintf("%s/%s/%s", awsAccountId, DefaultUserNamespace, username)) + + sweepResources = append(sweepResources, sweep.NewSweepResource(r, d, client)) + } + + if err != nil { + errs = multierror.Append(errs, fmt.Errorf("listing QuickSight Users for %s: %w", region, err)) + } + + if err := sweep.SweepOrchestrator(sweepResources); err != nil { + errs = multierror.Append(errs, 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 errs.ErrorOrNil() +} From cdfb0cb873e448544977878e18b08b3c4262e3a8 Mon Sep 17 00:00:00 2001 From: Jared Baker Date: Wed, 10 May 2023 16:51:25 -0400 Subject: [PATCH 4/4] r/aws_quicksight_template: add sweeper --- internal/service/quicksight/sweep.go | 58 ++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/internal/service/quicksight/sweep.go b/internal/service/quicksight/sweep.go index e883dadee0cd..6890d6a5a453 100644 --- a/internal/service/quicksight/sweep.go +++ b/internal/service/quicksight/sweep.go @@ -29,6 +29,10 @@ func init() { Name: "aws_quicksight_folder", F: sweepFolders, }) + resource.AddTestSweepers("aws_quicksight_template", &resource.Sweeper{ + Name: "aws_quicksight_template", + F: sweepTemplates, + }) resource.AddTestSweepers("aws_quicksight_user", &resource.Sweeper{ Name: "aws_quicksight_user", F: sweepUsers, @@ -194,6 +198,60 @@ func sweepFolders(region string) error { return errs.ErrorOrNil() } +func sweepTemplates(region string) error { + ctx := sweep.Context(region) + client, err := sweep.SharedRegionalSweepClient(region) + + if err != nil { + return fmt.Errorf("error getting client: %w", err) + } + + conn := client.(*conns.AWSClient).QuickSightConn() + sweepResources := make([]sweep.Sweepable, 0) + var errs *multierror.Error + + awsAccountId := client.(*conns.AWSClient).AccountID + + input := &quicksight.ListTemplatesInput{ + AwsAccountId: aws.String(awsAccountId), + } + + err = conn.ListTemplatesPagesWithContext(ctx, input, func(page *quicksight.ListTemplatesOutput, lastPage bool) bool { + if page == nil { + return !lastPage + } + + for _, tmpl := range page.TemplateSummaryList { + if tmpl == nil { + continue + } + + r := ResourceTemplate() + d := r.Data(nil) + d.SetId(fmt.Sprintf("%s,%s", awsAccountId, aws.StringValue(tmpl.TemplateId))) + + sweepResources = append(sweepResources, sweep.NewSweepResource(r, d, client)) + } + + return !lastPage + }) + + if err != nil { + errs = multierror.Append(errs, 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)) + } + + if sweep.SkipSweepError(errs.ErrorOrNil()) { + log.Printf("[WARN] Skipping QuickSight Template sweep for %s: %s", region, errs) + return nil + } + + return errs.ErrorOrNil() +} + func sweepUsers(region string) error { ctx := sweep.Context(region) client, err := sweep.SharedRegionalSweepClient(region)