Skip to content

Commit

Permalink
Adds context parameter to conns.AWSClient DefaultTagsConfig
Browse files Browse the repository at this point in the history
  • Loading branch information
gdavison committed Oct 10, 2024
1 parent 8de1213 commit a252a62
Show file tree
Hide file tree
Showing 18 changed files with 40 additions and 31 deletions.
12 changes: 6 additions & 6 deletions docs/resource-tagging.md
Original file line number Diff line number Diff line change
Expand Up @@ -335,7 +335,7 @@ implement the logic to convert the configuration tags into the service tags, e.g
=== "Terraform Plugin SDK V2"
```go
// Typically declared near conn := /*...*/
defaultTagsConfig := meta.(*conns.AWSClient).DefaultTagsConfig()
defaultTagsConfig := meta.(*conns.AWSClient).DefaultTagsConfig(ctx)
tags := defaultTagsConfig.MergeTags(tftags.New(ctx, d.Get("tags").(map[string]interface{})))

input := &eks.CreateClusterInput{
Expand All @@ -349,7 +349,7 @@ If the service API does not allow passing an empty list, the logic can be adjust
=== "Terraform Plugin SDK V2"
```go
// Typically declared near conn := /*...*/
defaultTagsConfig := meta.(*conns.AWSClient).DefaultTagsConfig()
defaultTagsConfig := meta.(*conns.AWSClient).DefaultTagsConfig(ctx)
tags := defaultTagsConfig.MergeTags(tftags.New(ctx, d.Get("tags").(map[string]interface{})))

input := &eks.CreateClusterInput{
Expand All @@ -367,7 +367,7 @@ implement the logic to convert the configuration tags into the service API call
=== "Terraform Plugin SDK V2"
```go
// Typically declared near conn := /*...*/
defaultTagsConfig := meta.(*conns.AWSClient).DefaultTagsConfig()
defaultTagsConfig := meta.(*conns.AWSClient).DefaultTagsConfig(ctx)
tags := defaultTagsConfig.MergeTags(tftags.New(ctx, d.Get("tags").(map[string]interface{})))

/* ... creation steps ... */
Expand All @@ -386,7 +386,7 @@ This example shows using `TagSpecifications`:
=== "Terraform Plugin SDK V2"
```go
// Typically declared near conn := /*...*/
defaultTagsConfig := meta.(*conns.AWSClient).DefaultTagsConfig()
defaultTagsConfig := meta.(*conns.AWSClient).DefaultTagsConfig(ctx)
tags := defaultTagsConfig.MergeTags(tftags.New(ctx, d.Get("tags").(map[string]interface{})))

input := &ec2.CreateFleetInput{
Expand All @@ -402,7 +402,7 @@ In the resource `Read` operation, implement the logic to convert the service tag
=== "Terraform Plugin SDK V2"
```go
// Typically declared near conn := /*...*/
defaultTagsConfig := meta.(*conns.AWSClient).DefaultTagsConfig()
defaultTagsConfig := meta.(*conns.AWSClient).DefaultTagsConfig(ctx)
ignoreTagsConfig := meta.(*conns.AWSClient).IgnoreTagsConfig

/* ... other d.Set(...) logic ... */
Expand All @@ -424,7 +424,7 @@ use the generated `listTags` function, e.g., with Athena Workgroups:
=== "Terraform Plugin SDK V2"
```go
// Typically declared near conn := /*...*/
defaultTagsConfig := meta.(*conns.AWSClient).DefaultTagsConfig()
defaultTagsConfig := meta.(*conns.AWSClient).DefaultTagsConfig(ctx)
ignoreTagsConfig := meta.(*conns.AWSClient).IgnoreTagsConfig

/* ... other d.Set(...) logic ... */
Expand Down
6 changes: 1 addition & 5 deletions internal/conns/awsclient.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,14 +55,10 @@ func (c *AWSClient) CredentialsProvider(context.Context) aws_sdkv2.CredentialsPr
return c.awsConfig.Credentials
}

func (c *AWSClient) DefaultTagsConfig() *tftags.DefaultConfig {
func (c *AWSClient) DefaultTagsConfig(context.Context) *tftags.DefaultConfig {
return c.defaultTagsConfig
}

func (c *AWSClient) SetDefaultTagsConfig(d *tftags.DefaultConfig) {
c.defaultTagsConfig = d
}

func (c *AWSClient) AwsConfig(context.Context) aws_sdkv2.Config { // nosemgrep:ci.aws-in-func-name
return c.awsConfig.Copy()
}
Expand Down
13 changes: 13 additions & 0 deletions internal/conns/testing.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: MPL-2.0

package conns

import (
tftags "github.com/hashicorp/terraform-provider-aws/internal/tags"
)

// SetDefaultTagsConfig is only intended for use in tests
func SetDefaultTagsConfig(client *AWSClient, d *tftags.DefaultConfig) {
client.defaultTagsConfig = d
}
2 changes: 1 addition & 1 deletion internal/framework/resource_with_configure.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ func (r *ResourceWithConfigure) SetTagsAll(ctx context.Context, request resource
return
}

defaultTagsConfig := r.Meta().DefaultTagsConfig()
defaultTagsConfig := r.Meta().DefaultTagsConfig(ctx)
ignoreTagsConfig := r.Meta().IgnoreTagsConfig

var planTags tftags.Map
Expand Down
4 changes: 2 additions & 2 deletions internal/provider/fwprovider/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -335,7 +335,7 @@ func (p *fwprovider) DataSources(ctx context.Context) []func() datasource.DataSo
bootstrapContext := func(ctx context.Context, meta *conns.AWSClient) context.Context {
ctx = conns.NewDataSourceContext(ctx, servicePackageName, v.Name)
if meta != nil {
ctx = tftags.NewContext(ctx, meta.DefaultTagsConfig(), meta.IgnoreTagsConfig)
ctx = tftags.NewContext(ctx, meta.DefaultTagsConfig(ctx), meta.IgnoreTagsConfig)
ctx = meta.RegisterLogger(ctx)
}

Expand Down Expand Up @@ -405,7 +405,7 @@ func (p *fwprovider) Resources(ctx context.Context) []func() resource.Resource {
bootstrapContext := func(ctx context.Context, meta *conns.AWSClient) context.Context {
ctx = conns.NewResourceContext(ctx, servicePackageName, v.Name)
if meta != nil {
ctx = tftags.NewContext(ctx, meta.DefaultTagsConfig(), meta.IgnoreTagsConfig)
ctx = tftags.NewContext(ctx, meta.DefaultTagsConfig(ctx), meta.IgnoreTagsConfig)
ctx = meta.RegisterLogger(ctx)
ctx = flex.RegisterLogger(ctx)
}
Expand Down
4 changes: 2 additions & 2 deletions internal/provider/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -295,7 +295,7 @@ func New(ctx context.Context) (*schema.Provider, error) {
bootstrapContext := func(ctx context.Context, meta any) context.Context {
ctx = conns.NewDataSourceContext(ctx, servicePackageName, v.Name)
if v, ok := meta.(*conns.AWSClient); ok {
ctx = tftags.NewContext(ctx, v.DefaultTagsConfig(), v.IgnoreTagsConfig)
ctx = tftags.NewContext(ctx, v.DefaultTagsConfig(ctx), v.IgnoreTagsConfig)
ctx = v.RegisterLogger(ctx)
}

Expand Down Expand Up @@ -371,7 +371,7 @@ func New(ctx context.Context) (*schema.Provider, error) {
bootstrapContext := func(ctx context.Context, meta any) context.Context {
ctx = conns.NewResourceContext(ctx, servicePackageName, v.Name)
if v, ok := meta.(*conns.AWSClient); ok {
ctx = tftags.NewContext(ctx, v.DefaultTagsConfig(), v.IgnoreTagsConfig)
ctx = tftags.NewContext(ctx, v.DefaultTagsConfig(ctx), v.IgnoreTagsConfig)
ctx = v.RegisterLogger(ctx)
}

Expand Down
2 changes: 1 addition & 1 deletion internal/provider/provider_acc_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -931,7 +931,7 @@ func testAccCheckProviderDefaultTags_Tags(ctx context.Context, t *testing.T, p *
}

providerClient := (*p).Meta().(*conns.AWSClient)
defaultTagsConfig := providerClient.DefaultTagsConfig()
defaultTagsConfig := providerClient.DefaultTagsConfig(ctx)

if defaultTagsConfig == nil || len(defaultTagsConfig.Tags) == 0 {
if len(expectedTags) != 0 {
Expand Down
4 changes: 2 additions & 2 deletions internal/provider/tags_interceptor_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -82,14 +82,14 @@ func TestTagsResourceInterceptor(t *testing.T) {
"tag2": "tag",
}),
}
conn.SetDefaultTagsConfig(expandDefaultTags(context.Background(), map[string]interface{}{
conns.SetDefaultTagsConfig(conn, expandDefaultTags(context.Background(), map[string]interface{}{
"tag": "",
}))

bootstrapContext := func(ctx context.Context, meta any) context.Context {
ctx = conns.NewResourceContext(ctx, "Test", "aws_test")
if v, ok := meta.(*conns.AWSClient); ok {
ctx = tftags.NewContext(ctx, v.DefaultTagsConfig(), v.IgnoreTagsConfig)
ctx = tftags.NewContext(ctx, v.DefaultTagsConfig(ctx), v.IgnoreTagsConfig)
}

return ctx
Expand Down
6 changes: 3 additions & 3 deletions internal/service/ec2/ec2_instance.go
Original file line number Diff line number Diff line change
Expand Up @@ -974,7 +974,7 @@ func resourceInstanceCreate(ctx context.Context, d *schema.ResourceData, meta in
tagSpecifications := getTagSpecificationsIn(ctx, awstypes.ResourceTypeInstance)

// block devices
defaultTagsConfig := meta.(*conns.AWSClient).DefaultTagsConfig()
defaultTagsConfig := meta.(*conns.AWSClient).DefaultTagsConfig(ctx)
tagSpecifications = append(tagSpecifications,
tagSpecificationsFromKeyValue(
defaultTagsConfig.MergeTags(tftags.New(ctx, d.Get("volume_tags").(map[string]interface{}))),
Expand Down Expand Up @@ -1332,7 +1332,7 @@ func resourceInstanceRead(ctx context.Context, d *schema.ResourceData, meta inte
return sdkdiag.AppendErrorf(diags, "reading EC2 Instance (%s): %s", d.Id(), err)
}

defaultTagsConfig := meta.(*conns.AWSClient).DefaultTagsConfig()
defaultTagsConfig := meta.(*conns.AWSClient).DefaultTagsConfig(ctx)
ignoreTagsConfig := meta.(*conns.AWSClient).IgnoreTagsConfig
tags := keyValueTags(ctx, volumeTags).IgnoreAWS().IgnoreConfig(ignoreTagsConfig)

Expand Down Expand Up @@ -2320,7 +2320,7 @@ func readBlockDevicesFromInstance(ctx context.Context, d *schema.ResourceData, m
return nil, err
}

defaultTagsConfig := meta.(*conns.AWSClient).DefaultTagsConfig()
defaultTagsConfig := meta.(*conns.AWSClient).DefaultTagsConfig(ctx)
ignoreTagsConfig := meta.(*conns.AWSClient).IgnoreTagsConfig

for _, vol := range volResp.Volumes {
Expand Down
2 changes: 1 addition & 1 deletion internal/service/ecs/task_execution_data_source.go
Original file line number Diff line number Diff line change
Expand Up @@ -285,7 +285,7 @@ func dataSourceTaskExecutionRead(ctx context.Context, d *schema.ResourceData, me
TaskDefinition: aws.String(taskDefinition),
}

defaultTagsConfig := meta.(*conns.AWSClient).DefaultTagsConfig()
defaultTagsConfig := meta.(*conns.AWSClient).DefaultTagsConfig(ctx)
tags := defaultTagsConfig.MergeTags(tftags.New(ctx, d.Get(names.AttrTags).(map[string]interface{})))
if len(tags) > 0 {
input.Tags = Tags(tags.IgnoreAWS())
Expand Down
2 changes: 1 addition & 1 deletion internal/service/elasticache/subnet_group.go
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,7 @@ func resourceSubnetGroupCustomizeDiff(ctx context.Context, diff *schema.Resource
// Reserved ElastiCache Subnet Groups with the name "default" do not support tagging,
// thus we must suppress the diff originating from the provider-level default_tags configuration.
// Reference: https://github.com/hashicorp/terraform-provider-aws/issues/19213.
defaultTagsConfig := meta.(*conns.AWSClient).DefaultTagsConfig()
defaultTagsConfig := meta.(*conns.AWSClient).DefaultTagsConfig(ctx)
if len(defaultTagsConfig.GetTags()) > 0 && diff.Get(names.AttrName).(string) == "default" {
return nil
}
Expand Down
2 changes: 1 addition & 1 deletion internal/service/fsx/file_cache.go
Original file line number Diff line number Diff line change
Expand Up @@ -380,7 +380,7 @@ func resourceFileCacheRead(ctx context.Context, d *schema.ResourceData, meta int
return sdkdiag.AppendErrorf(diags, "reading FSx for Lustre Data Repository Associations: %s", err)
}

defaultTagsConfig := meta.(*conns.AWSClient).DefaultTagsConfig()
defaultTagsConfig := meta.(*conns.AWSClient).DefaultTagsConfig(ctx)
ignoreTagsConfig := meta.(*conns.AWSClient).IgnoreTagsConfig
if err := d.Set("data_repository_association", flattenDataRepositoryAssociations(ctx, dataRepositoryAssociations, defaultTagsConfig, ignoreTagsConfig)); err != nil {
return sdkdiag.AppendErrorf(diags, "setting data_repository_association: %s", err)
Expand Down
2 changes: 1 addition & 1 deletion internal/service/meta/default_tags_data_source.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ func (d *defaultTagsDataSource) Read(ctx context.Context, request datasource.Rea
return
}

defaultTagsConfig := d.Meta().DefaultTagsConfig()
defaultTagsConfig := d.Meta().DefaultTagsConfig(ctx)
ignoreTagsConfig := d.Meta().IgnoreTagsConfig
tags := defaultTagsConfig.GetTags()

Expand Down
2 changes: 1 addition & 1 deletion internal/service/quicksight/data_set_data_source.go
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ func dataSourceDataSetRead(ctx context.Context, d *schema.ResourceData, meta int
}

// Cannot use transparent tagging because it has to handle `tags_all` as well
defaultTagsConfig := meta.(*conns.AWSClient).DefaultTagsConfig()
defaultTagsConfig := meta.(*conns.AWSClient).DefaultTagsConfig(ctx)
ignoreTagsConfig := meta.(*conns.AWSClient).IgnoreTagsConfig

tags, err := listTags(ctx, conn, d.Get(names.AttrARN).(string))
Expand Down
2 changes: 1 addition & 1 deletion internal/service/s3/bucket_object.go
Original file line number Diff line number Diff line change
Expand Up @@ -478,7 +478,7 @@ func resourceBucketObjectUpload(ctx context.Context, d *schema.ResourceData, met
input.StorageClass = types.StorageClass(v.(string))
}

defaultTagsConfig := meta.(*conns.AWSClient).DefaultTagsConfig()
defaultTagsConfig := meta.(*conns.AWSClient).DefaultTagsConfig(ctx)
tags := tftags.New(ctx, getContextTags(ctx))
tags = defaultTagsConfig.MergeTags(tags)
if len(tags) > 0 {
Expand Down
2 changes: 1 addition & 1 deletion internal/service/s3/object.go
Original file line number Diff line number Diff line change
Expand Up @@ -565,7 +565,7 @@ func resourceObjectUpload(ctx context.Context, d *schema.ResourceData, meta inte
input.StorageClass = types.StorageClass(v.(string))
}

defaultTagsConfig := meta.(*conns.AWSClient).DefaultTagsConfig()
defaultTagsConfig := meta.(*conns.AWSClient).DefaultTagsConfig(ctx)
tags := tftags.New(ctx, getContextTags(ctx))
if ignoreProviderDefaultTags(ctx, d) {
tags = tags.RemoveDefaultConfig(defaultTagsConfig)
Expand Down
2 changes: 1 addition & 1 deletion internal/service/s3/object_copy.go
Original file line number Diff line number Diff line change
Expand Up @@ -646,7 +646,7 @@ func resourceObjectCopyDoCopy(ctx context.Context, d *schema.ResourceData, meta
input.TaggingDirective = types.TaggingDirective(v.(string))
}

defaultTagsConfig := meta.(*conns.AWSClient).DefaultTagsConfig()
defaultTagsConfig := meta.(*conns.AWSClient).DefaultTagsConfig(ctx)
tags := tftags.New(ctx, getContextTags(ctx))
tags = defaultTagsConfig.MergeTags(tags)
if len(tags) > 0 {
Expand Down
2 changes: 1 addition & 1 deletion internal/verify/diff.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import (
// after resource READ operations as resource and provider-level tags
// will be indistinguishable when returned from an AWS API.
func SetTagsDiff(ctx context.Context, diff *schema.ResourceDiff, meta interface{}) error {
defaultTagsConfig := meta.(*conns.AWSClient).DefaultTagsConfig()
defaultTagsConfig := meta.(*conns.AWSClient).DefaultTagsConfig(ctx)
ignoreTagsConfig := meta.(*conns.AWSClient).IgnoreTagsConfig

resourceTags := tftags.New(ctx, diff.Get("tags").(map[string]interface{}))
Expand Down

0 comments on commit a252a62

Please sign in to comment.