From 6fba1d7de33edd9980497c97ca474f7267cadf81 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Fri, 11 Oct 2024 11:43:26 -0400 Subject: [PATCH 1/4] r/aws_athena_data_catalog: Add sweeper. --- internal/service/athena/data_catalog.go | 2 +- internal/service/athena/database.go | 1 + internal/service/athena/sweep.go | 62 +++++++++++++++++++++++++ 3 files changed, 64 insertions(+), 1 deletion(-) diff --git a/internal/service/athena/data_catalog.go b/internal/service/athena/data_catalog.go index 8eb9a1dac345..fdaadd3c1ab5 100644 --- a/internal/service/athena/data_catalog.go +++ b/internal/service/athena/data_catalog.go @@ -192,7 +192,7 @@ func resourceDataCatalogDelete(ctx context.Context, d *schema.ResourceData, meta conn := meta.(*conns.AWSClient).AthenaClient(ctx) - log.Printf("[DEBUG] Deleting Athena Data Catalog: (%s)", d.Id()) + log.Printf("[DEBUG] Deleting Athena Data Catalog (%s)", d.Id()) _, err := conn.DeleteDataCatalog(ctx, &athena.DeleteDataCatalogInput{ Name: aws.String(d.Id()), }) diff --git a/internal/service/athena/database.go b/internal/service/athena/database.go index 22c3c189694b..47d8ad600053 100644 --- a/internal/service/athena/database.go +++ b/internal/service/athena/database.go @@ -197,6 +197,7 @@ func resourceDatabaseDelete(ctx context.Context, d *schema.ResourceData, meta in ResultConfiguration: expandResultConfiguration(d), } + log.Printf("[DEBUG] Deleting Athena Database (%s)", d.Id()) output, err := conn.StartQueryExecution(ctx, input) if err != nil { diff --git a/internal/service/athena/sweep.go b/internal/service/athena/sweep.go index 20ccf6290b5c..8b50fe6cc2a9 100644 --- a/internal/service/athena/sweep.go +++ b/internal/service/athena/sweep.go @@ -16,12 +16,71 @@ import ( ) func RegisterSweepers() { + resource.AddTestSweepers("aws_athena_data_catalog", &resource.Sweeper{ + Name: "aws_athena_data_catalog", + F: sweepDataCatalogs, + Dependencies: []string{ + "aws_athena_database", + }, + }) + resource.AddTestSweepers("aws_athena_database", &resource.Sweeper{ Name: "aws_athena_database", F: sweepDatabases, }) } +func sweepDataCatalogs(region string) error { + ctx := sweep.Context(region) + client, err := sweep.SharedRegionalSweepClient(ctx, region) + if err != nil { + return fmt.Errorf("error getting client: %s", err) + } + conn := client.AthenaClient(ctx) + input := &athena.ListDatabasesInput{ + CatalogName: aws.String("AwsDataCatalog"), + } + sweepResources := make([]sweep.Sweepable, 0) + + pages := athena.NewListDatabasesPaginator(conn, input) + for pages.HasMorePages() { + page, err := pages.NextPage(ctx) + + if awsv2.SkipSweepError(err) { + log.Printf("[WARN] Skipping Athena Database sweep for %s: %s", region, err) + return nil + } + + if err != nil { + return fmt.Errorf("error listing Athena Databases (%s): %w", region, err) + } + + for _, v := range page.DatabaseList { + name := aws.ToString(v.Name) + + if name == "default" { + log.Printf("[INFO] Skipping Athena Database %s", name) + continue + } + + r := resourceDatabase() + d := r.Data(nil) + d.SetId(name) + d.Set(names.AttrForceDestroy, true) + + sweepResources = append(sweepResources, sweep.NewSweepResource(r, d, client)) + } + } + + err = sweep.SweepOrchestrator(ctx, sweepResources) + + if err != nil { + return fmt.Errorf("error sweeping Athena Databases (%s): %w", region, err) + } + + return nil +} + func sweepDatabases(region string) error { ctx := sweep.Context(region) client, err := sweep.SharedRegionalSweepClient(ctx, region) @@ -49,9 +108,12 @@ func sweepDatabases(region string) error { for _, v := range page.DatabaseList { name := aws.ToString(v.Name) + if name == "default" { + log.Printf("[INFO] Skipping Athena Database %s", name) continue } + r := resourceDatabase() d := r.Data(nil) d.SetId(name) From 4bc1cd083c8b431ac47c56379bd8f8cece9d0288 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Fri, 11 Oct 2024 11:47:20 -0400 Subject: [PATCH 2/4] r/aws_athena_workgroup: Add sweeper. --- internal/service/athena/sweep.go | 76 ++++++++++++++++++++++++---- internal/service/athena/workgroup.go | 1 + 2 files changed, 66 insertions(+), 11 deletions(-) diff --git a/internal/service/athena/sweep.go b/internal/service/athena/sweep.go index 8b50fe6cc2a9..830aeee1d1ea 100644 --- a/internal/service/athena/sweep.go +++ b/internal/service/athena/sweep.go @@ -28,9 +28,65 @@ func RegisterSweepers() { Name: "aws_athena_database", F: sweepDatabases, }) + + resource.AddTestSweepers("aws_athena_workgroup", &resource.Sweeper{ + Name: "aws_athena_workgroup", + F: sweepWorkGroups, + Dependencies: []string{ + "aws_athena_data_catalog", + }, + }) } func sweepDataCatalogs(region string) error { + ctx := sweep.Context(region) + client, err := sweep.SharedRegionalSweepClient(ctx, region) + if err != nil { + return fmt.Errorf("error getting client: %s", err) + } + conn := client.AthenaClient(ctx) + input := &athena.ListDataCatalogsInput{} + sweepResources := make([]sweep.Sweepable, 0) + + pages := athena.NewListDataCatalogsPaginator(conn, input) + for pages.HasMorePages() { + page, err := pages.NextPage(ctx) + + if awsv2.SkipSweepError(err) { + log.Printf("[WARN] Skipping Athena Data Catalog sweep for %s: %s", region, err) + return nil + } + + if err != nil { + return fmt.Errorf("error listing Athena DData Catalogs (%s): %w", region, err) + } + + for _, v := range page.DataCatalogsSummary { + name := aws.ToString(v.CatalogName) + + if name == "AwsDataCatalog" { + log.Printf("[INFO] Skipping Athena Data Catalog %s", name) + continue + } + + r := resourceDataCatalog() + d := r.Data(nil) + d.SetId(name) + + sweepResources = append(sweepResources, sweep.NewSweepResource(r, d, client)) + } + } + + err = sweep.SweepOrchestrator(ctx, sweepResources) + + if err != nil { + return fmt.Errorf("error sweeping Athena Data Catalogs (%s): %w", region, err) + } + + return nil +} + +func sweepDatabases(region string) error { ctx := sweep.Context(region) client, err := sweep.SharedRegionalSweepClient(ctx, region) if err != nil { @@ -81,36 +137,34 @@ func sweepDataCatalogs(region string) error { return nil } -func sweepDatabases(region string) error { +func sweepWorkGroups(region string) error { ctx := sweep.Context(region) client, err := sweep.SharedRegionalSweepClient(ctx, region) if err != nil { return fmt.Errorf("error getting client: %s", err) } conn := client.AthenaClient(ctx) - input := &athena.ListDatabasesInput{ - CatalogName: aws.String("AwsDataCatalog"), - } + input := &athena.ListWorkGroupsInput{} sweepResources := make([]sweep.Sweepable, 0) - pages := athena.NewListDatabasesPaginator(conn, input) + pages := athena.NewListWorkGroupsPaginator(conn, input) for pages.HasMorePages() { page, err := pages.NextPage(ctx) if awsv2.SkipSweepError(err) { - log.Printf("[WARN] Skipping Athena Database sweep for %s: %s", region, err) + log.Printf("[WARN] Skipping Athena WorkGroup sweep for %s: %s", region, err) return nil } if err != nil { - return fmt.Errorf("error listing Athena Databases (%s): %w", region, err) + return fmt.Errorf("error listing Athena WorkGroups (%s): %w", region, err) } - for _, v := range page.DatabaseList { + for _, v := range page.WorkGroups { name := aws.ToString(v.Name) - if name == "default" { - log.Printf("[INFO] Skipping Athena Database %s", name) + if name == "primary" { + log.Printf("[INFO] Skipping Athena WorkGroup %s", name) continue } @@ -126,7 +180,7 @@ func sweepDatabases(region string) error { err = sweep.SweepOrchestrator(ctx, sweepResources) if err != nil { - return fmt.Errorf("error sweeping Athena Databases (%s): %w", region, err) + return fmt.Errorf("error sweeping Athena WorkGroups (%s): %w", region, err) } return nil diff --git a/internal/service/athena/workgroup.go b/internal/service/athena/workgroup.go index adf3d48c4f1d..8e8efc9fe2bd 100644 --- a/internal/service/athena/workgroup.go +++ b/internal/service/athena/workgroup.go @@ -301,6 +301,7 @@ func resourceWorkGroupDelete(ctx context.Context, d *schema.ResourceData, meta i input.RecursiveDeleteOption = aws.Bool(v.(bool)) } + log.Printf("[DEBUG] Deleting Athena WorkGroup (%s)", d.Id()) _, err := conn.DeleteWorkGroup(ctx, input) if err != nil { From aec82b4ab16bd06fa04dc1f66e096aa0a248a0e7 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Fri, 11 Oct 2024 11:56:23 -0400 Subject: [PATCH 3/4] r/aws_athena_database: Sweep databases in all catalogs. --- internal/service/athena/sweep.go | 48 +++++++++++++++++++++----------- 1 file changed, 31 insertions(+), 17 deletions(-) diff --git a/internal/service/athena/sweep.go b/internal/service/athena/sweep.go index 830aeee1d1ea..fe31c71dedf3 100644 --- a/internal/service/athena/sweep.go +++ b/internal/service/athena/sweep.go @@ -58,7 +58,7 @@ func sweepDataCatalogs(region string) error { } if err != nil { - return fmt.Errorf("error listing Athena DData Catalogs (%s): %w", region, err) + return fmt.Errorf("error listing Athena Data Catalogs (%s): %w", region, err) } for _, v := range page.DataCatalogsSummary { @@ -93,12 +93,10 @@ func sweepDatabases(region string) error { return fmt.Errorf("error getting client: %s", err) } conn := client.AthenaClient(ctx) - input := &athena.ListDatabasesInput{ - CatalogName: aws.String("AwsDataCatalog"), - } + input := &athena.ListDataCatalogsInput{} sweepResources := make([]sweep.Sweepable, 0) - pages := athena.NewListDatabasesPaginator(conn, input) + pages := athena.NewListDataCatalogsPaginator(conn, input) for pages.HasMorePages() { page, err := pages.NextPage(ctx) @@ -108,23 +106,39 @@ func sweepDatabases(region string) error { } if err != nil { - return fmt.Errorf("error listing Athena Databases (%s): %w", region, err) + return fmt.Errorf("error listing Athena Data Catalogs (%s): %w", region, err) } - for _, v := range page.DatabaseList { - name := aws.ToString(v.Name) - - if name == "default" { - log.Printf("[INFO] Skipping Athena Database %s", name) - continue + for _, v := range page.DataCatalogsSummary { + catalogName := aws.ToString(v.CatalogName) + input := &athena.ListDatabasesInput{ + CatalogName: aws.String(catalogName), } - r := resourceDatabase() - d := r.Data(nil) - d.SetId(name) - d.Set(names.AttrForceDestroy, true) + pages := athena.NewListDatabasesPaginator(conn, input) + for pages.HasMorePages() { + page, err := pages.NextPage(ctx) - sweepResources = append(sweepResources, sweep.NewSweepResource(r, d, client)) + if err != nil { + continue + } + + for _, v := range page.DatabaseList { + name := aws.ToString(v.Name) + + if name == "default" { + log.Printf("[INFO] Skipping Athena Database %s", name) + continue + } + + r := resourceDatabase() + d := r.Data(nil) + d.SetId(name) + d.Set(names.AttrForceDestroy, true) + + sweepResources = append(sweepResources, sweep.NewSweepResource(r, d, client)) + } + } } } From 2a24a11d214da99b97957f54b5d1beb15da6c7c8 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Fri, 11 Oct 2024 11:58:36 -0400 Subject: [PATCH 4/4] Fix typo. --- internal/service/athena/sweep.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/service/athena/sweep.go b/internal/service/athena/sweep.go index fe31c71dedf3..67502ea8f8a1 100644 --- a/internal/service/athena/sweep.go +++ b/internal/service/athena/sweep.go @@ -182,7 +182,7 @@ func sweepWorkGroups(region string) error { continue } - r := resourceDatabase() + r := resourceWorkGroup() d := r.Data(nil) d.SetId(name) d.Set(names.AttrForceDestroy, true)