Skip to content

Commit

Permalink
Merge pull request #30639 from hashicorp/td-transparent-tagging-phase…
Browse files Browse the repository at this point in the history
…3c-ssmincidents

Tech debt: Reduce `tags` boilerplate code - Plugin SDK resources `ssmincidents` (Phase 3c)
  • Loading branch information
ewbankkit authored Apr 11, 2023
2 parents e6ea81c + 237bdeb commit 8e8e209
Show file tree
Hide file tree
Showing 6 changed files with 110 additions and 77 deletions.
4 changes: 4 additions & 0 deletions internal/service/ssmincidents/generate.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
//go:generate go run ../../generate/tags/main.go -AWSSDKVersion=2 -TagInIDElem=ResourceArn -ListTags -ListTagsInIDElem=ResourceArn -ServiceTagsMap -KVTValues -SkipTypesImp
// ONLY generate directives and package declaration! Do not add anything else to this file.

package ssmincidents
53 changes: 21 additions & 32 deletions internal/service/ssmincidents/replication_set.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,8 @@ const (
ResNameReplicationSet = "Replication Set"
)

// @SDKResource("aws_ssmincidents_replication_set")
// @SDKResource("aws_ssmincidents_replication_set", name="Replication Set")
// @Tags(identifierAttribute="id")
func ResourceReplicationSet() *schema.Resource {
return &schema.Resource{
CreateWithoutTimeout: resourceReplicationSetCreate,
Expand Down Expand Up @@ -72,8 +73,8 @@ func ResourceReplicationSet() *schema.Resource {
},
},
},
"tags": tftags.TagsSchema(),
"tags_all": tftags.TagsSchemaComputed(),
names.AttrTags: tftags.TagsSchema(),
names.AttrTagsAll: tftags.TagsSchemaComputed(),
// all other computed fields in alphabetic order
"created_by": {
Type: schema.TypeString,
Expand Down Expand Up @@ -101,21 +102,15 @@ func ResourceReplicationSet() *schema.Resource {
}
}

func resourceReplicationSetCreate(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
func resourceReplicationSetCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
client := meta.(*conns.AWSClient).SSMIncidentsClient()

input := &ssmincidents.CreateReplicationSetInput{
Regions: expandRegions(d.Get("region").(*schema.Set).List()),
Tags: GetTagsIn(ctx),
}

defaultTagsConfig := meta.(*conns.AWSClient).DefaultTagsConfig
tags := defaultTagsConfig.MergeTags(tftags.New(context, d.Get("tags").(map[string]interface{})))

if len(tags) > 0 {
input.Tags = tags.IgnoreAWS().Map()
}

createReplicationSetOutput, err := client.CreateReplicationSet(context, input)
createReplicationSetOutput, err := client.CreateReplicationSet(ctx, input)
if err != nil {
return create.DiagError(names.SSMIncidents, create.ErrActionCreating, ResNameReplicationSet, "", err)
}
Expand All @@ -130,17 +125,17 @@ func resourceReplicationSetCreate(context context.Context, d *schema.ResourceDat
Arn: aws.String(d.Id()),
}

if err := ssmincidents.NewWaitForReplicationSetActiveWaiter(client).Wait(context, getReplicationSetInput, d.Timeout(schema.TimeoutCreate)); err != nil {
if err := ssmincidents.NewWaitForReplicationSetActiveWaiter(client).Wait(ctx, getReplicationSetInput, d.Timeout(schema.TimeoutCreate)); err != nil {
return create.DiagError(names.SSMIncidents, create.ErrActionWaitingForCreation, ResNameReplicationSet, d.Id(), err)
}

return resourceReplicationSetRead(context, d, meta)
return resourceReplicationSetRead(ctx, d, meta)
}

func resourceReplicationSetRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
func resourceReplicationSetRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
client := meta.(*conns.AWSClient).SSMIncidentsClient()

replicationSet, err := FindReplicationSetByID(context, client, d.Id())
replicationSet, err := FindReplicationSetByID(ctx, client, d.Id())

if !d.IsNewResource() && tfresource.NotFound(err) {
log.Printf("[WARN] SSMIncidents ReplicationSet (%s) not found, removing from state", d.Id())
Expand All @@ -156,20 +151,15 @@ func resourceReplicationSetRead(context context.Context, d *schema.ResourceData,
d.Set("created_by", replicationSet.CreatedBy)
d.Set("deletion_protected", replicationSet.DeletionProtected)
d.Set("last_modified_by", replicationSet.LastModifiedBy)
d.Set("status", replicationSet.Status)

if err := d.Set("region", flattenRegions(replicationSet.RegionMap)); err != nil {
return create.DiagError(names.SSMIncidents, create.ErrActionSetting, ResNameReplicationSet, d.Id(), err)
}

if diagErr := setResourceDataTags(context, d, meta, client, ResNameReplicationSet); diagErr != nil {
return diagErr
}
d.Set("status", replicationSet.Status)

return nil
}

func resourceReplicationSetUpdate(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
func resourceReplicationSetUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
client := meta.(*conns.AWSClient).SSMIncidentsClient()

if d.HasChanges("region") {
Expand All @@ -182,7 +172,7 @@ func resourceReplicationSetUpdate(context context.Context, d *schema.ResourceDat
}

log.Printf("[DEBUG] Updating SSMIncidents ReplicationSet (%s): %#v", d.Id(), input)
_, err := client.UpdateReplicationSet(context, input)
_, err := client.UpdateReplicationSet(ctx, input)
if err != nil {
return create.DiagError(names.SSMIncidents, create.ErrActionUpdating, ResNameReplicationSet, d.Id(), err)
}
Expand All @@ -191,7 +181,7 @@ func resourceReplicationSetUpdate(context context.Context, d *schema.ResourceDat
Arn: aws.String(d.Id()),
}

if err := ssmincidents.NewWaitForReplicationSetActiveWaiter(client).Wait(context, getReplicationSetInput, d.Timeout(schema.TimeoutUpdate)); err != nil {
if err := ssmincidents.NewWaitForReplicationSetActiveWaiter(client).Wait(ctx, getReplicationSetInput, d.Timeout(schema.TimeoutUpdate)); err != nil {
return create.DiagError(names.SSMIncidents, create.ErrActionWaitingForUpdate, ResNameReplicationSet, d.Id(), err)
}
}
Expand All @@ -200,20 +190,19 @@ func resourceReplicationSetUpdate(context context.Context, d *schema.ResourceDat
if d.HasChanges("tags_all", "tags") {
log.Printf("[DEBUG] Updating SSMIncidents ReplicationSet tags")

if err := updateResourceTags(context, client, d); err != nil {
if err := updateResourceTags(ctx, client, d); err != nil {
return create.DiagError(names.SSMIncidents, create.ErrActionUpdating, ResNameReplicationSet, d.Id(), err)
}
}

return resourceReplicationSetRead(context, d, meta)
return resourceReplicationSetRead(ctx, d, meta)
}

func resourceReplicationSetDelete(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
func resourceReplicationSetDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
client := meta.(*conns.AWSClient).SSMIncidentsClient()

log.Printf("[INFO] Deleting SSMIncidents ReplicationSet %s", d.Id())

_, err := client.DeleteReplicationSet(context, &ssmincidents.DeleteReplicationSetInput{
log.Printf("[INFO] Deleting SSMIncidents ReplicationSet: %s", d.Id())
_, err := client.DeleteReplicationSet(ctx, &ssmincidents.DeleteReplicationSetInput{
Arn: aws.String(d.Id()),
})

Expand All @@ -230,7 +219,7 @@ func resourceReplicationSetDelete(context context.Context, d *schema.ResourceDat
Arn: aws.String(d.Id()),
}

if err := ssmincidents.NewWaitForReplicationSetDeletedWaiter(client).Wait(context, getReplicationSetInput, d.Timeout(schema.TimeoutDelete)); err != nil {
if err := ssmincidents.NewWaitForReplicationSetDeletedWaiter(client).Wait(ctx, getReplicationSetInput, d.Timeout(schema.TimeoutDelete)); err != nil {
return create.DiagError(names.SSMIncidents, create.ErrActionWaitingForDeletion, ResNameReplicationSet, d.Id(), err)
}

Expand Down
9 changes: 5 additions & 4 deletions internal/service/ssmincidents/replication_set_data_source.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,18 +71,18 @@ const (
DSNameReplicationSet = "Replication Set Data Source"
)

func dataSourceReplicationSetRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
func dataSourceReplicationSetRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
client := meta.(*conns.AWSClient).SSMIncidentsClient()

arn, err := getReplicationSetARN(context, client)
arn, err := getReplicationSetARN(ctx, client)

if err != nil {
return create.DiagError(names.SSMIncidents, create.ErrActionReading, ResNameReplicationSet, d.Id(), err)
}

d.SetId(arn)

replicationSet, err := FindReplicationSetByID(context, client, d.Id())
replicationSet, err := FindReplicationSetByID(ctx, client, d.Id())

if err != nil {
return create.DiagError(names.SSMIncidents, create.ErrActionReading, ResNameReplicationSet, d.Id(), err)
Expand All @@ -98,7 +98,8 @@ func dataSourceReplicationSetRead(context context.Context, d *schema.ResourceDat
return create.DiagError(names.SSMIncidents, create.ErrActionSetting, ResNameReplicationSet, d.Id(), err)
}

tags, err := listResourceTags(context, client, d.Id())
tags, err := ListTags(ctx, client, d.Id())

if err != nil {
return create.DiagError(names.SSMIncidents, create.ErrActionReading, DSNameReplicationSet, d.Id(), err)
}
Expand Down
4 changes: 4 additions & 0 deletions internal/service/ssmincidents/service_package_gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

41 changes: 0 additions & 41 deletions internal/service/ssmincidents/tags.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,52 +5,11 @@ import (

"github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/service/ssmincidents"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/hashicorp/terraform-provider-aws/internal/conns"
"github.com/hashicorp/terraform-provider-aws/internal/create"
"github.com/hashicorp/terraform-provider-aws/internal/flex"
tftags "github.com/hashicorp/terraform-provider-aws/internal/tags"
"github.com/hashicorp/terraform-provider-aws/names"
)

// lists all tags for a particular resource
func listResourceTags(context context.Context, client *ssmincidents.Client, arn string) (tftags.KeyValueTags, error) {
input := &ssmincidents.ListTagsForResourceInput{
ResourceArn: aws.String(arn),
}

output, err := client.ListTagsForResource(context, input)

if err != nil {
return tftags.New(context, nil), err
}

return tftags.New(context, output.Tags), nil
}

// gets all tags via get request and sets them in Resource Data ssmincidents resource
func setResourceDataTags(context context.Context, d *schema.ResourceData, meta interface{}, client *ssmincidents.Client, resourceName string) diag.Diagnostics {
tags, err := listResourceTags(context, client, d.Id())
if err != nil {
return create.DiagError(names.SSMIncidents, create.ErrActionReading, resourceName, d.Id(), err)
}

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

if err := d.Set("tags", tags.RemoveDefaultConfig(defaultTagsConfig).Map()); err != nil {
return create.DiagError(names.SSMIncidents, create.ErrActionSetting, resourceName, d.Id(), err)
}

if err := d.Set("tags_all", tags.Map()); err != nil {
return create.DiagError(names.SSMIncidents, create.ErrActionSetting, resourceName, d.Id(), err)
}

return nil
}

// makes api calls to update Resource Data Tags
func updateResourceTags(context context.Context, client *ssmincidents.Client, d *schema.ResourceData) error {
old, new := d.GetChange("tags_all")
Expand Down
76 changes: 76 additions & 0 deletions internal/service/ssmincidents/tags_gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 8e8e209

Please sign in to comment.