Skip to content

Commit 6e08655

Browse files
committed
r/aws_rum_app_monitor: Switch to 'WithoutTimeout' CRUD handlers (hashicorp#15090).
Acceptance test output: % make testacc TESTARGS='-run=TestAccRUMAppMonitor_' PKG=rum ACCTEST_PARALLELISM=3 ==> Checking that code complies with gofmt requirements... TF_ACC=1 go test ./internal/service/rum/... -v -count 1 -parallel 3 -run=TestAccRUMAppMonitor_ -timeout 180m === RUN TestAccRUMAppMonitor_basic === PAUSE TestAccRUMAppMonitor_basic === RUN TestAccRUMAppMonitor_tags === PAUSE TestAccRUMAppMonitor_tags === RUN TestAccRUMAppMonitor_disappears === PAUSE TestAccRUMAppMonitor_disappears === CONT TestAccRUMAppMonitor_basic === CONT TestAccRUMAppMonitor_disappears === CONT TestAccRUMAppMonitor_tags --- PASS: TestAccRUMAppMonitor_disappears (15.75s) --- PASS: TestAccRUMAppMonitor_basic (31.95s) --- PASS: TestAccRUMAppMonitor_tags (41.23s) PASS ok github.com/hashicorp/terraform-provider-aws/internal/service/rum 46.586s
1 parent 4bf76c9 commit 6e08655

File tree

3 files changed

+75
-68
lines changed

3 files changed

+75
-68
lines changed

internal/service/rum/app_monitor.go

+65-33
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
package rum
22

33
import (
4+
"context"
45
"fmt"
56
"log"
67

78
"github.com/aws/aws-sdk-go/aws"
89
"github.com/aws/aws-sdk-go/aws/arn"
910
"github.com/aws/aws-sdk-go/service/cloudwatchrum"
1011
"github.com/hashicorp/aws-sdk-go-base/v2/awsv1shim/v2/tfawserr"
12+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
13+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
1114
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
1215
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
1316
"github.com/hashicorp/terraform-provider-aws/internal/conns"
@@ -19,10 +22,11 @@ import (
1922

2023
func ResourceAppMonitor() *schema.Resource {
2124
return &schema.Resource{
22-
Create: resourceAppMonitorCreate,
23-
Read: resourceAppMonitorRead,
24-
Update: resourceAppMonitorUpdate,
25-
Delete: resourceAppMonitorDelete,
25+
CreateWithoutTimeout: resourceAppMonitorCreate,
26+
ReadWithoutTimeout: resourceAppMonitorRead,
27+
UpdateWithoutTimeout: resourceAppMonitorUpdate,
28+
DeleteWithoutTimeout: resourceAppMonitorDelete,
29+
2630
Importer: &schema.ResourceImporter{
2731
State: schema.ImportStatePassthrough,
2832
},
@@ -122,7 +126,7 @@ func ResourceAppMonitor() *schema.Resource {
122126
}
123127
}
124128

125-
func resourceAppMonitorCreate(d *schema.ResourceData, meta interface{}) error {
129+
func resourceAppMonitorCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
126130
conn := meta.(*conns.AWSClient).RUMConn
127131
defaultTagsConfig := meta.(*conns.AWSClient).DefaultTagsConfig
128132
tags := defaultTagsConfig.MergeTags(tftags.New(d.Get("tags").(map[string]interface{})))
@@ -142,35 +146,36 @@ func resourceAppMonitorCreate(d *schema.ResourceData, meta interface{}) error {
142146
input.Tags = Tags(tags.IgnoreAWS())
143147
}
144148

145-
_, err := conn.CreateAppMonitor(input)
149+
_, err := conn.CreateAppMonitorWithContext(ctx, input)
146150

147151
if err != nil {
148-
return fmt.Errorf("error creating CloudWatch RUM App Monitor %s: %w", name, err)
152+
return diag.Errorf("creating CloudWatch RUM App Monitor (%s): %s", name, err)
149153
}
150154

151155
d.SetId(name)
152156

153-
return resourceAppMonitorRead(d, meta)
157+
return resourceAppMonitorRead(ctx, d, meta)
154158
}
155159

156-
func resourceAppMonitorRead(d *schema.ResourceData, meta interface{}) error {
160+
func resourceAppMonitorRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
157161
conn := meta.(*conns.AWSClient).RUMConn
158162
defaultTagsConfig := meta.(*conns.AWSClient).DefaultTagsConfig
159163
ignoreTagsConfig := meta.(*conns.AWSClient).IgnoreTagsConfig
160164

161-
appMon, err := FindAppMonitorByName(conn, d.Id())
165+
appMon, err := FindAppMonitorByName(ctx, conn, d.Id())
166+
162167
if !d.IsNewResource() && tfresource.NotFound(err) {
163-
log.Printf("[WARN] Unable to find CloudWatch RUM App Monitor (%s); removing from state", d.Id())
168+
log.Printf("[WARN] CloudWatch RUM App Monitor %s not found, removing from state", d.Id())
164169
d.SetId("")
165170
return nil
166171
}
167172

168173
if err != nil {
169-
return fmt.Errorf("error reading CloudWatch RUM App Monitor (%s): %w", d.Id(), err)
174+
return diag.Errorf("reading CloudWatch RUM App Monitor (%s): %s", d.Id(), err)
170175
}
171176

172177
if err := d.Set("app_monitor_configuration", []interface{}{flattenAppMonitorConfiguration(appMon.AppMonitorConfiguration)}); err != nil {
173-
return fmt.Errorf("setting app_monitor_configuration: %w", err)
178+
return diag.Errorf("setting app_monitor_configuration: %s", err)
174179
}
175180
d.Set("app_monitor_id", appMon.Id)
176181
arn := arn.ARN{
@@ -190,71 +195,98 @@ func resourceAppMonitorRead(d *schema.ResourceData, meta interface{}) error {
190195

191196
//lintignore:AWSR002
192197
if err := d.Set("tags", tags.RemoveDefaultConfig(defaultTagsConfig).Map()); err != nil {
193-
return fmt.Errorf("error setting tags: %w", err)
198+
return diag.Errorf("setting tags: %s", err)
194199
}
195200

196201
if err := d.Set("tags_all", tags.Map()); err != nil {
197-
return fmt.Errorf("error setting tags_all: %w", err)
202+
return diag.Errorf("setting tags_all: %s", err)
198203
}
199204

200205
return nil
201206
}
202207

203-
func resourceAppMonitorUpdate(d *schema.ResourceData, meta interface{}) error {
208+
func resourceAppMonitorUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
204209
conn := meta.(*conns.AWSClient).RUMConn
205210

206211
if d.HasChangesExcept("tags", "tags_all") {
207212
input := &cloudwatchrum.UpdateAppMonitorInput{
208213
Name: aws.String(d.Id()),
209214
}
210215

211-
if d.HasChange("cw_log_enabled") {
212-
input.CwLogEnabled = aws.Bool(d.Get("cw_log_enabled").(bool))
213-
}
214-
215216
if d.HasChange("app_monitor_configuration") {
216217
input.AppMonitorConfiguration = expandAppMonitorConfiguration(d.Get("app_monitor_configuration").([]interface{})[0].(map[string]interface{}))
217218
}
218219

220+
if d.HasChange("cw_log_enabled") {
221+
input.CwLogEnabled = aws.Bool(d.Get("cw_log_enabled").(bool))
222+
}
223+
219224
if d.HasChange("domain") {
220225
input.Domain = aws.String(d.Get("domain").(string))
221226
}
222227

223-
log.Printf("[DEBUG] cloudwatchrum AppMonitor update config: %s", input.String())
224-
_, err := conn.UpdateAppMonitor(input)
228+
_, err := conn.UpdateAppMonitorWithContext(ctx, input)
229+
225230
if err != nil {
226-
return fmt.Errorf("error updating CloudWatch RUM App Monitor: %w", err)
231+
return diag.Errorf("updating CloudWatch RUM App Monitor (%s): %s", d.Id(), err)
227232
}
228233
}
229234

230235
if d.HasChange("tags_all") {
231236
o, n := d.GetChange("tags_all")
232237

233-
if err := UpdateTags(conn, d.Get("arn").(string), o, n); err != nil {
234-
return fmt.Errorf("error updating CloudWatch RUM App Monitor (%s) tags: %w", d.Id(), err)
238+
if err := UpdateTagsWithContext(ctx, conn, d.Get("arn").(string), o, n); err != nil {
239+
return diag.Errorf("updating CloudWatch RUM App Monitor (%s) tags: %s", d.Id(), err)
235240
}
236241
}
237242

238-
return resourceAppMonitorRead(d, meta)
243+
return resourceAppMonitorRead(ctx, d, meta)
239244
}
240245

241-
func resourceAppMonitorDelete(d *schema.ResourceData, meta interface{}) error {
246+
func resourceAppMonitorDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
242247
conn := meta.(*conns.AWSClient).RUMConn
243248

244-
input := &cloudwatchrum.DeleteAppMonitorInput{
249+
log.Printf("[DEBUG] Deleting CloudWatch RUM App Monitor: %s", d.Id())
250+
_, err := conn.DeleteAppMonitorWithContext(ctx, &cloudwatchrum.DeleteAppMonitorInput{
245251
Name: aws.String(d.Id()),
252+
})
253+
254+
if tfawserr.ErrCodeEquals(err, cloudwatchrum.ErrCodeResourceNotFoundException) {
255+
return nil
246256
}
247257

248-
if _, err := conn.DeleteAppMonitor(input); err != nil {
249-
if tfawserr.ErrCodeEquals(err, cloudwatchrum.ErrCodeResourceNotFoundException) {
250-
return nil
251-
}
252-
return fmt.Errorf("error deleting CloudWatch RUM App Monitor (%s): %w", d.Id(), err)
258+
if err != nil {
259+
return diag.Errorf("deleting CloudWatch RUM App Monitor (%s): %s", d.Id(), err)
253260
}
254261

255262
return nil
256263
}
257264

265+
func FindAppMonitorByName(ctx context.Context, conn *cloudwatchrum.CloudWatchRUM, name string) (*cloudwatchrum.AppMonitor, error) {
266+
input := &cloudwatchrum.GetAppMonitorInput{
267+
Name: aws.String(name),
268+
}
269+
270+
output, err := conn.GetAppMonitorWithContext(ctx, input)
271+
272+
if tfawserr.ErrCodeEquals(err, cloudwatchrum.ErrCodeResourceNotFoundException) {
273+
return nil, &resource.NotFoundError{
274+
LastError: err,
275+
LastRequest: input,
276+
}
277+
}
278+
279+
if err != nil {
280+
return nil, err
281+
}
282+
283+
if output == nil || output.AppMonitor == nil {
284+
return nil, tfresource.NewEmptyResultError(input)
285+
}
286+
287+
return output.AppMonitor, nil
288+
}
289+
258290
func expandAppMonitorConfiguration(tfMap map[string]interface{}) *cloudwatchrum.AppMonitorConfiguration {
259291
if tfMap == nil {
260292
return nil

internal/service/rum/app_monitor_test.go

+10-10
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package rum_test
22

33
import (
4+
"context"
45
"fmt"
56
"testing"
67

7-
"github.com/aws/aws-sdk-go/aws"
88
"github.com/aws/aws-sdk-go/service/cloudwatchrum"
99
sdkacctest "github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest"
1010
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
@@ -141,7 +141,8 @@ func testAccCheckAppMonitorDestroy(s *terraform.State) error {
141141
continue
142142
}
143143

144-
appMon, err := tfcloudwatchrum.FindAppMonitorByName(conn, rs.Primary.ID)
144+
_, err := tfcloudwatchrum.FindAppMonitorByName(context.Background(), conn, rs.Primary.ID)
145+
145146
if tfresource.NotFound(err) {
146147
continue
147148
}
@@ -150,32 +151,31 @@ func testAccCheckAppMonitorDestroy(s *terraform.State) error {
150151
return err
151152
}
152153

153-
if aws.StringValue(appMon.Name) == rs.Primary.ID {
154-
return fmt.Errorf("cloudwatchrum App Monitor %q still exists", rs.Primary.ID)
155-
}
154+
return fmt.Errorf("CloudWatch RUM App Monitor %s still exists", rs.Primary.ID)
156155
}
157156

158157
return nil
159158
}
160159

161-
func testAccCheckAppMonitorExists(n string, appMon *cloudwatchrum.AppMonitor) resource.TestCheckFunc {
160+
func testAccCheckAppMonitorExists(n string, v *cloudwatchrum.AppMonitor) resource.TestCheckFunc {
162161
return func(s *terraform.State) error {
163162
rs, ok := s.RootModule().Resources[n]
164163
if !ok {
165164
return fmt.Errorf("Not found: %s", n)
166165
}
167-
168166
if rs.Primary.ID == "" {
169-
return fmt.Errorf("No cloudwatchrum App Monitor ID is set")
167+
return fmt.Errorf("No CloudWatch RUM App Monitor ID is set")
170168
}
171169

172170
conn := acctest.Provider.Meta().(*conns.AWSClient).RUMConn
173-
resp, err := tfcloudwatchrum.FindAppMonitorByName(conn, rs.Primary.ID)
171+
172+
output, err := tfcloudwatchrum.FindAppMonitorByName(context.Background(), conn, rs.Primary.ID)
173+
174174
if err != nil {
175175
return err
176176
}
177177

178-
*appMon = *resp
178+
*v = *output
179179

180180
return nil
181181
}

internal/service/rum/find.go

-25
Original file line numberDiff line numberDiff line change
@@ -8,31 +8,6 @@ import (
88
"github.com/hashicorp/terraform-provider-aws/internal/tfresource"
99
)
1010

11-
func FindAppMonitorByName(conn *cloudwatchrum.CloudWatchRUM, name string) (*cloudwatchrum.AppMonitor, error) {
12-
input := cloudwatchrum.GetAppMonitorInput{
13-
Name: aws.String(name),
14-
}
15-
16-
output, err := conn.GetAppMonitor(&input)
17-
18-
if tfawserr.ErrCodeEquals(err, cloudwatchrum.ErrCodeResourceNotFoundException) {
19-
return nil, &resource.NotFoundError{
20-
LastError: err,
21-
LastRequest: input,
22-
}
23-
}
24-
25-
if err != nil {
26-
return nil, err
27-
}
28-
29-
if output == nil || output.AppMonitor == nil {
30-
return nil, tfresource.NewEmptyResultError(input)
31-
}
32-
33-
return output.AppMonitor, nil
34-
}
35-
3611
func FindMetricsDestinationByName(conn *cloudwatchrum.CloudWatchRUM, name string) (*cloudwatchrum.MetricDestinationSummary, error) {
3712
input := cloudwatchrum.ListRumMetricsDestinationsInput{
3813
AppMonitorName: aws.String(name),

0 commit comments

Comments
 (0)