diff --git a/.gitignore b/.gitignore index 2031e4470937..3f8fb6ff0329 100644 --- a/.gitignore +++ b/.gitignore @@ -31,7 +31,7 @@ package-lock.json package.json skaff/skaff sweeper-bin -terraform-provider-aws +terraform-provider-aws* terraform-providers-schema/ terraform.tfplan terraform.tfstate diff --git a/internal/conns/awsclient_core_gen.go b/internal/conns/awsclient_core_gen.go new file mode 100644 index 000000000000..afbbea33d505 --- /dev/null +++ b/internal/conns/awsclient_core_gen.go @@ -0,0 +1,105 @@ +// Copyright IBM Corp. 2014, 2026 +// SPDX-License-Identifier: MPL-2.0 + +// Code generated by internal/generate/awsclient/main.go; DO NOT EDIT. + +//go:build core + +package conns + +import ( + "context" + + "github.com/aws/aws-sdk-go-v2/service/account" + "github.com/aws/aws-sdk-go-v2/service/cloudwatch" + "github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs" + "github.com/aws/aws-sdk-go-v2/service/dynamodb" + "github.com/aws/aws-sdk-go-v2/service/ec2" + "github.com/aws/aws-sdk-go-v2/service/ecs" + "github.com/aws/aws-sdk-go-v2/service/eks" + "github.com/aws/aws-sdk-go-v2/service/elasticache" + "github.com/aws/aws-sdk-go-v2/service/iam" + "github.com/aws/aws-sdk-go-v2/service/kms" + "github.com/aws/aws-sdk-go-v2/service/lambda" + "github.com/aws/aws-sdk-go-v2/service/organizations" + "github.com/aws/aws-sdk-go-v2/service/rds" + "github.com/aws/aws-sdk-go-v2/service/s3" + "github.com/aws/aws-sdk-go-v2/service/s3control" + "github.com/aws/aws-sdk-go-v2/service/sns" + "github.com/aws/aws-sdk-go-v2/service/sqs" + "github.com/aws/aws-sdk-go-v2/service/sts" + "github.com/hashicorp/terraform-provider-aws/internal/errs" + "github.com/hashicorp/terraform-provider-aws/names" +) + +func (c *AWSClient) AccountClient(ctx context.Context) *account.Client { + return errs.Must(client[*account.Client](ctx, c, names.Account, make(map[string]any))) +} + +func (c *AWSClient) CloudWatchClient(ctx context.Context) *cloudwatch.Client { + return errs.Must(client[*cloudwatch.Client](ctx, c, names.CloudWatch, make(map[string]any))) +} + +func (c *AWSClient) DynamoDBClient(ctx context.Context) *dynamodb.Client { + return errs.Must(client[*dynamodb.Client](ctx, c, names.DynamoDB, make(map[string]any))) +} + +func (c *AWSClient) EC2Client(ctx context.Context) *ec2.Client { + return errs.Must(client[*ec2.Client](ctx, c, names.EC2, make(map[string]any))) +} + +func (c *AWSClient) ECSClient(ctx context.Context) *ecs.Client { + return errs.Must(client[*ecs.Client](ctx, c, names.ECS, make(map[string]any))) +} + +func (c *AWSClient) EKSClient(ctx context.Context) *eks.Client { + return errs.Must(client[*eks.Client](ctx, c, names.EKS, make(map[string]any))) +} + +func (c *AWSClient) ElastiCacheClient(ctx context.Context) *elasticache.Client { + return errs.Must(client[*elasticache.Client](ctx, c, names.ElastiCache, make(map[string]any))) +} + +func (c *AWSClient) IAMClient(ctx context.Context) *iam.Client { + return errs.Must(client[*iam.Client](ctx, c, names.IAM, make(map[string]any))) +} + +func (c *AWSClient) KMSClient(ctx context.Context) *kms.Client { + return errs.Must(client[*kms.Client](ctx, c, names.KMS, make(map[string]any))) +} + +func (c *AWSClient) LambdaClient(ctx context.Context) *lambda.Client { + return errs.Must(client[*lambda.Client](ctx, c, names.Lambda, make(map[string]any))) +} + +func (c *AWSClient) LogsClient(ctx context.Context) *cloudwatchlogs.Client { + return errs.Must(client[*cloudwatchlogs.Client](ctx, c, names.Logs, make(map[string]any))) +} + +func (c *AWSClient) OrganizationsClient(ctx context.Context) *organizations.Client { + return errs.Must(client[*organizations.Client](ctx, c, names.Organizations, make(map[string]any))) +} + +func (c *AWSClient) RDSClient(ctx context.Context) *rds.Client { + return errs.Must(client[*rds.Client](ctx, c, names.RDS, make(map[string]any))) +} + +func (c *AWSClient) S3Client(ctx context.Context) *s3.Client { + return errs.Must(client[*s3.Client](ctx, c, names.S3, make(map[string]any))) +} + +func (c *AWSClient) S3ControlClient(ctx context.Context) *s3control.Client { + return errs.Must(client[*s3control.Client](ctx, c, names.S3Control, make(map[string]any))) +} + +func (c *AWSClient) SNSClient(ctx context.Context) *sns.Client { + return errs.Must(client[*sns.Client](ctx, c, names.SNS, make(map[string]any))) +} + +func (c *AWSClient) SQSClient(ctx context.Context) *sqs.Client { + return errs.Must(client[*sqs.Client](ctx, c, names.SQS, make(map[string]any))) +} + +func (c *AWSClient) STSClient(ctx context.Context) *sts.Client { + return errs.Must(client[*sts.Client](ctx, c, names.STS, make(map[string]any))) +} diff --git a/internal/conns/awsclient_gen.go b/internal/conns/awsclient_gen.go index 138779db3d8c..8300db5bc7a7 100644 --- a/internal/conns/awsclient_gen.go +++ b/internal/conns/awsclient_gen.go @@ -2,6 +2,9 @@ // SPDX-License-Identifier: MPL-2.0 // Code generated by internal/generate/awsclient/main.go; DO NOT EDIT. + +//go:build !core + package conns import ( diff --git a/internal/generate/awsclient/file.gtpl b/internal/generate/awsclient/file.gtpl index ad3b12e2ed1e..4e980033bdc5 100644 --- a/internal/generate/awsclient/file.gtpl +++ b/internal/generate/awsclient/file.gtpl @@ -2,6 +2,9 @@ // SPDX-License-Identifier: MPL-2.0 // Code generated by internal/generate/awsclient/main.go; DO NOT EDIT. + +//go:build {{ .BuildTags }} + package conns import ( diff --git a/internal/generate/awsclient/main.go b/internal/generate/awsclient/main.go index 0c1b1403365a..bd9c2c7aa49b 100644 --- a/internal/generate/awsclient/main.go +++ b/internal/generate/awsclient/main.go @@ -9,6 +9,7 @@ import ( "cmp" _ "embed" "slices" + "strings" "github.com/hashicorp/terraform-provider-aws/internal/generate/common" "github.com/hashicorp/terraform-provider-aws/names/data" @@ -20,7 +21,8 @@ type ServiceDatum struct { } type TemplateData struct { - Services []ServiceDatum + BuildTags string + Services []ServiceDatum } func main() { @@ -36,7 +38,13 @@ func main() { g.Fatalf("error reading service data: %s", err) } - td := TemplateData{} + td := TemplateData{ + BuildTags: "!core", + } + + coreTd := TemplateData{ + BuildTags: "core", + } for _, l := range data { if l.Exclude() { @@ -57,6 +65,10 @@ func main() { } td.Services = append(td.Services, s) + + if common.IsCoreService(l.ProviderPackage()) { + coreTd.Services = append(coreTd.Services, s) + } } slices.SortStableFunc(td.Services, func(a, b ServiceDatum) int { @@ -72,6 +84,21 @@ func main() { if err := d.Write(); err != nil { g.Fatalf("generating file (%s): %s", filename, err) } + + slices.SortStableFunc(coreTd.Services, func(a, b ServiceDatum) int { + return cmp.Compare(a.ProviderNameUpper, b.ProviderNameUpper) + }) + + coreFilename := strings.ReplaceAll(filename, `_gen`, `_core_gen`) + coreD := g.NewGoFileDestination(coreFilename) + + if err := coreD.BufferTemplate("awsclient", tmpl, coreTd); err != nil { + g.Fatalf("generating file (%s): %s", coreFilename, err) + } + + if err := coreD.Write(); err != nil { + g.Fatalf("generating file (%s): %s", coreFilename, err) + } } //go:embed file.gtpl diff --git a/internal/generate/common/core_services.go b/internal/generate/common/core_services.go new file mode 100644 index 000000000000..3ad678bb1bc0 --- /dev/null +++ b/internal/generate/common/core_services.go @@ -0,0 +1,37 @@ +// Copyright IBM Corp. 2014, 2026 +// SPDX-License-Identifier: MPL-2.0 + +package common + +import "slices" + +// coreServices is the list of AWS services included when the provider is built +// with the 'core' tag +// +// It includes primary services and their explicitly required dependencies. +var coreServices = []string{ + "account", + "cloudwatch", + "dynamodb", + "ec2", + "ecs", + "eks", + "elasticache", + "iam", + "kms", + "lambda", + "logs", + "organizations", + "rds", + "s3", + "s3control", + "sns", + "sqs", + "sts", +} + +// IsCoreService returns true if the given service package name is considered a +// core service +func IsCoreService(name string) bool { + return slices.Contains(coreServices, name) +} diff --git a/internal/generate/servicepackages/file.tmpl b/internal/generate/servicepackages/file.tmpl index 98c5952609ab..7652cd288bec 100644 --- a/internal/generate/servicepackages/file.tmpl +++ b/internal/generate/servicepackages/file.tmpl @@ -3,6 +3,8 @@ // Code generated by internal/generate/servicepackages/main.go; DO NOT EDIT. +//go:build {{ .BuildTags }} + package {{ .PackageName }} import ( diff --git a/internal/generate/servicepackages/main.go b/internal/generate/servicepackages/main.go index b1c948ee8072..88f4057bcf1f 100644 --- a/internal/generate/servicepackages/main.go +++ b/internal/generate/servicepackages/main.go @@ -12,6 +12,7 @@ import ( "fmt" "os" "slices" + "strings" "github.com/hashicorp/terraform-provider-aws/internal/generate/common" "github.com/hashicorp/terraform-provider-aws/names/data" @@ -44,6 +45,12 @@ func main() { td := TemplateData{ PackageName: packageName, + BuildTags: "!core", + } + + coreTd := TemplateData{ + PackageName: packageName, + BuildTags: "core", } for _, l := range data { @@ -61,6 +68,10 @@ func main() { } td.Services = append(td.Services, s) + + if common.IsCoreService(p) { + coreTd.Services = append(coreTd.Services, s) + } } slices.SortStableFunc(td.Services, func(a, b ServiceDatum) int { @@ -76,6 +87,21 @@ func main() { if err := d.Write(); err != nil { g.Fatalf("generating file (%s): %s", filename, err) } + + slices.SortStableFunc(coreTd.Services, func(a, b ServiceDatum) int { + return cmp.Compare(a.ProviderPackage, b.ProviderPackage) + }) + + coreFilename := strings.ReplaceAll(filename, `_gen`, `_core_gen`) + coreD := g.NewGoFileDestination(coreFilename) + + if err := coreD.BufferTemplate("servicepackages", tmpl, coreTd); err != nil { + g.Fatalf("error generating core service packages list: %s", err) + } + + if err := coreD.Write(); err != nil { + g.Fatalf("generating file (%s): %s", coreFilename, err) + } } type ServiceDatum struct { @@ -84,6 +110,7 @@ type ServiceDatum struct { type TemplateData struct { PackageName string + BuildTags string Services []ServiceDatum } diff --git a/internal/provider/sdkv2/service_packages_core_gen.go b/internal/provider/sdkv2/service_packages_core_gen.go new file mode 100644 index 000000000000..a60121d1c8ed --- /dev/null +++ b/internal/provider/sdkv2/service_packages_core_gen.go @@ -0,0 +1,58 @@ +// Copyright IBM Corp. 2014, 2026 +// SPDX-License-Identifier: MPL-2.0 + +// Code generated by internal/generate/servicepackages/main.go; DO NOT EDIT. + +//go:build core + +package sdkv2 + +import ( + "context" + "slices" + + "github.com/hashicorp/terraform-provider-aws/internal/conns" + "github.com/hashicorp/terraform-provider-aws/internal/service/account" + "github.com/hashicorp/terraform-provider-aws/internal/service/cloudwatch" + "github.com/hashicorp/terraform-provider-aws/internal/service/dynamodb" + "github.com/hashicorp/terraform-provider-aws/internal/service/ec2" + "github.com/hashicorp/terraform-provider-aws/internal/service/ecs" + "github.com/hashicorp/terraform-provider-aws/internal/service/eks" + "github.com/hashicorp/terraform-provider-aws/internal/service/elasticache" + "github.com/hashicorp/terraform-provider-aws/internal/service/iam" + "github.com/hashicorp/terraform-provider-aws/internal/service/kms" + "github.com/hashicorp/terraform-provider-aws/internal/service/lambda" + "github.com/hashicorp/terraform-provider-aws/internal/service/logs" + "github.com/hashicorp/terraform-provider-aws/internal/service/organizations" + "github.com/hashicorp/terraform-provider-aws/internal/service/rds" + "github.com/hashicorp/terraform-provider-aws/internal/service/s3" + "github.com/hashicorp/terraform-provider-aws/internal/service/s3control" + "github.com/hashicorp/terraform-provider-aws/internal/service/sns" + "github.com/hashicorp/terraform-provider-aws/internal/service/sqs" + "github.com/hashicorp/terraform-provider-aws/internal/service/sts" +) + +func servicePackages(ctx context.Context) []conns.ServicePackage { + v := []conns.ServicePackage{ + account.ServicePackage(ctx), + cloudwatch.ServicePackage(ctx), + dynamodb.ServicePackage(ctx), + ec2.ServicePackage(ctx), + ecs.ServicePackage(ctx), + eks.ServicePackage(ctx), + elasticache.ServicePackage(ctx), + iam.ServicePackage(ctx), + kms.ServicePackage(ctx), + lambda.ServicePackage(ctx), + logs.ServicePackage(ctx), + organizations.ServicePackage(ctx), + rds.ServicePackage(ctx), + s3.ServicePackage(ctx), + s3control.ServicePackage(ctx), + sns.ServicePackage(ctx), + sqs.ServicePackage(ctx), + sts.ServicePackage(ctx), + } + + return slices.Clone(v) +} diff --git a/internal/provider/sdkv2/service_packages_gen.go b/internal/provider/sdkv2/service_packages_gen.go index 06338751ecb8..48d26794471a 100644 --- a/internal/provider/sdkv2/service_packages_gen.go +++ b/internal/provider/sdkv2/service_packages_gen.go @@ -3,6 +3,8 @@ // Code generated by internal/generate/servicepackages/main.go; DO NOT EDIT. +//go:build !core + package sdkv2 import ( diff --git a/internal/sweep/service_packages_core_gen_test.go b/internal/sweep/service_packages_core_gen_test.go new file mode 100644 index 000000000000..60189be4f068 --- /dev/null +++ b/internal/sweep/service_packages_core_gen_test.go @@ -0,0 +1,58 @@ +// Copyright IBM Corp. 2014, 2026 +// SPDX-License-Identifier: MPL-2.0 + +// Code generated by internal/generate/servicepackages/main.go; DO NOT EDIT. + +//go:build core + +package sweep_test + +import ( + "context" + "slices" + + "github.com/hashicorp/terraform-provider-aws/internal/conns" + "github.com/hashicorp/terraform-provider-aws/internal/service/account" + "github.com/hashicorp/terraform-provider-aws/internal/service/cloudwatch" + "github.com/hashicorp/terraform-provider-aws/internal/service/dynamodb" + "github.com/hashicorp/terraform-provider-aws/internal/service/ec2" + "github.com/hashicorp/terraform-provider-aws/internal/service/ecs" + "github.com/hashicorp/terraform-provider-aws/internal/service/eks" + "github.com/hashicorp/terraform-provider-aws/internal/service/elasticache" + "github.com/hashicorp/terraform-provider-aws/internal/service/iam" + "github.com/hashicorp/terraform-provider-aws/internal/service/kms" + "github.com/hashicorp/terraform-provider-aws/internal/service/lambda" + "github.com/hashicorp/terraform-provider-aws/internal/service/logs" + "github.com/hashicorp/terraform-provider-aws/internal/service/organizations" + "github.com/hashicorp/terraform-provider-aws/internal/service/rds" + "github.com/hashicorp/terraform-provider-aws/internal/service/s3" + "github.com/hashicorp/terraform-provider-aws/internal/service/s3control" + "github.com/hashicorp/terraform-provider-aws/internal/service/sns" + "github.com/hashicorp/terraform-provider-aws/internal/service/sqs" + "github.com/hashicorp/terraform-provider-aws/internal/service/sts" +) + +func servicePackages(ctx context.Context) []conns.ServicePackage { + v := []conns.ServicePackage{ + account.ServicePackage(ctx), + cloudwatch.ServicePackage(ctx), + dynamodb.ServicePackage(ctx), + ec2.ServicePackage(ctx), + ecs.ServicePackage(ctx), + eks.ServicePackage(ctx), + elasticache.ServicePackage(ctx), + iam.ServicePackage(ctx), + kms.ServicePackage(ctx), + lambda.ServicePackage(ctx), + logs.ServicePackage(ctx), + organizations.ServicePackage(ctx), + rds.ServicePackage(ctx), + s3.ServicePackage(ctx), + s3control.ServicePackage(ctx), + sns.ServicePackage(ctx), + sqs.ServicePackage(ctx), + sts.ServicePackage(ctx), + } + + return slices.Clone(v) +} diff --git a/internal/sweep/service_packages_gen_test.go b/internal/sweep/service_packages_gen_test.go index 1feea5713b57..b5ee3afb646a 100644 --- a/internal/sweep/service_packages_gen_test.go +++ b/internal/sweep/service_packages_gen_test.go @@ -3,6 +3,8 @@ // Code generated by internal/generate/servicepackages/main.go; DO NOT EDIT. +//go:build !core + package sweep_test import (