Skip to content

Commit 7a1102f

Browse files
committed
fix(apm): [117999788] apm_instance add retry operator (#2707)
* add * add
1 parent cb6bc74 commit 7a1102f

File tree

5 files changed

+79
-54
lines changed

5 files changed

+79
-54
lines changed

.changelog/2707.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:enhancement
2+
resource/tencentcloud_apm_instance: add retry operator
3+
```

tencentcloud/services/apm/resource_tc_apm_instance.go

Lines changed: 32 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -68,13 +68,13 @@ func resourceTencentCloudApmInstanceCreate(d *schema.ResourceData, meta interfac
6868
defer tccommon.LogElapsed("resource.tencentcloud_apm_instance.create")()
6969
defer tccommon.InconsistentCheck(d, meta)()
7070

71-
logId := tccommon.GetLogId(tccommon.ContextNil)
72-
7371
var (
72+
logId = tccommon.GetLogId(tccommon.ContextNil)
7473
request = apm.NewCreateApmInstanceRequest()
7574
response = apm.NewCreateApmInstanceResponse()
7675
instanceId string
7776
)
77+
7878
if v, ok := d.GetOk("name"); ok {
7979
request.Name = helper.String(v.(string))
8080
}
@@ -102,9 +102,11 @@ func resourceTencentCloudApmInstanceCreate(d *schema.ResourceData, meta interfac
102102
} else {
103103
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
104104
}
105+
105106
response = result
106107
return nil
107108
})
109+
108110
if err != nil {
109111
log.Printf("[CRITAL]%s create apm instance failed, reason:%+v", logId, err)
110112
return err
@@ -130,15 +132,24 @@ func resourceTencentCloudApmInstanceRead(d *schema.ResourceData, meta interface{
130132
defer tccommon.LogElapsed("resource.tencentcloud_apm_instance.read")()
131133
defer tccommon.InconsistentCheck(d, meta)()
132134

133-
logId := tccommon.GetLogId(tccommon.ContextNil)
134-
135-
ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
135+
var (
136+
logId = tccommon.GetLogId(tccommon.ContextNil)
137+
ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
138+
service = ApmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
139+
instance *apm.ApmInstanceDetail
140+
instanceId = d.Id()
141+
)
136142

137-
service := ApmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
143+
err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError {
144+
result, err := service.DescribeApmInstanceById(ctx, instanceId)
145+
if err != nil {
146+
return tccommon.RetryError(err)
147+
}
138148

139-
instanceId := d.Id()
149+
instance = result
150+
return nil
151+
})
140152

141-
instance, err := service.DescribeApmInstanceById(ctx, instanceId)
142153
if err != nil {
143154
return err
144155
}
@@ -184,18 +195,16 @@ func resourceTencentCloudApmInstanceUpdate(d *schema.ResourceData, meta interfac
184195
defer tccommon.LogElapsed("resource.tencentcloud_apm_instance.update")()
185196
defer tccommon.InconsistentCheck(d, meta)()
186197

187-
logId := tccommon.GetLogId(tccommon.ContextNil)
188-
189-
request := apm.NewModifyApmInstanceRequest()
198+
var (
199+
logId = tccommon.GetLogId(tccommon.ContextNil)
200+
request = apm.NewModifyApmInstanceRequest()
201+
instanceId = d.Id()
202+
)
190203

191204
needChange := false
192-
193-
instanceId := d.Id()
194-
195205
request.InstanceId = &instanceId
196206

197207
mutableArgs := []string{"name", "description", "trace_duration", "span_daily_counters", "pay_mode"}
198-
199208
for _, v := range mutableArgs {
200209
if d.HasChange(v) {
201210
needChange = true
@@ -204,7 +213,6 @@ func resourceTencentCloudApmInstanceUpdate(d *schema.ResourceData, meta interfac
204213
}
205214

206215
if needChange {
207-
208216
if v, ok := d.GetOk("name"); ok {
209217
request.Name = helper.String(v.(string))
210218
}
@@ -232,13 +240,14 @@ func resourceTencentCloudApmInstanceUpdate(d *schema.ResourceData, meta interfac
232240
} else {
233241
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
234242
}
243+
235244
return nil
236245
})
246+
237247
if err != nil {
238248
log.Printf("[CRITAL]%s update apm instance failed, reason:%+v", logId, err)
239249
return err
240250
}
241-
242251
}
243252

244253
if d.HasChange("tags") {
@@ -260,11 +269,12 @@ func resourceTencentCloudApmInstanceDelete(d *schema.ResourceData, meta interfac
260269
defer tccommon.LogElapsed("resource.tencentcloud_apm_instance.delete")()
261270
defer tccommon.InconsistentCheck(d, meta)()
262271

263-
logId := tccommon.GetLogId(tccommon.ContextNil)
264-
ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
265-
266-
service := ApmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
267-
instanceId := d.Id()
272+
var (
273+
logId = tccommon.GetLogId(tccommon.ContextNil)
274+
ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
275+
service = ApmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
276+
instanceId = d.Id()
277+
)
268278

269279
if err := service.DeleteApmInstanceById(ctx, instanceId); err != nil {
270280
return err

tencentcloud/services/apm/resource_tc_apm_instance.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@ Provides a resource to create a apm instance
55
Example Usage
66

77
```hcl
8-
resource "tencentcloud_apm_instance" "instance" {
9-
name = "terraform-test"
10-
description = "for terraform test"
11-
trace_duration = 15
12-
span_daily_counters = 20
8+
resource "tencentcloud_apm_instance" "example" {
9+
name = "tf-example"
10+
description = "desc."
11+
trace_duration = 15
12+
span_daily_counters = 0
1313
tags = {
14-
"createdBy" = "terraform"
14+
createdBy = "terraform"
1515
}
1616
}
1717
```
@@ -21,5 +21,5 @@ Import
2121
apm instance can be imported using the id, e.g.
2222

2323
```
24-
terraform import tencentcloud_apm_instance.instance instance_id
25-
```
24+
terraform import tencentcloud_apm_instance.example apm-IMVrxXl1K
25+
```

tencentcloud/services/apm/resource_tc_apm_instance_test.go

Lines changed: 30 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
99
)
1010

11+
// go test -i; go test -test.run TestAccTencentCloudApmInstanceResource_basic -v
1112
func TestAccTencentCloudApmInstanceResource_basic(t *testing.T) {
1213
t.Parallel()
1314
resource.Test(t, resource.TestCase{
@@ -18,17 +19,26 @@ func TestAccTencentCloudApmInstanceResource_basic(t *testing.T) {
1819
Steps: []resource.TestStep{
1920
{
2021
Config: testAccApmInstance,
21-
Check: resource.ComposeTestCheckFunc(resource.TestCheckResourceAttrSet("tencentcloud_apm_instance.instance", "id")),
22+
Check: resource.ComposeTestCheckFunc(
23+
resource.TestCheckResourceAttrSet("tencentcloud_apm_instance.example", "id"),
24+
resource.TestCheckResourceAttr("tencentcloud_apm_instance.example", "name", "tf-example"),
25+
resource.TestCheckResourceAttr("tencentcloud_apm_instance.example", "description", "desc."),
26+
resource.TestCheckResourceAttr("tencentcloud_apm_instance.example", "trace_duration", "15"),
27+
resource.TestCheckResourceAttr("tencentcloud_apm_instance.example", "span_daily_counters", "20"),
28+
),
2229
},
2330
{
2431
Config: testAccApmInstanceUpdate,
2532
Check: resource.ComposeTestCheckFunc(
26-
resource.TestCheckResourceAttrSet("tencentcloud_apm_instance.instance", "id"),
27-
resource.TestCheckResourceAttr("tencentcloud_apm_instance.instance", "name", "terraform-for-test"),
33+
resource.TestCheckResourceAttrSet("tencentcloud_apm_instance.example", "id"),
34+
resource.TestCheckResourceAttr("tencentcloud_apm_instance.example", "name", "tf-example-update"),
35+
resource.TestCheckResourceAttr("tencentcloud_apm_instance.example", "description", "desc update."),
36+
resource.TestCheckResourceAttr("tencentcloud_apm_instance.example", "trace_duration", "15"),
37+
resource.TestCheckResourceAttr("tencentcloud_apm_instance.example", "span_daily_counters", "20"),
2838
),
2939
},
3040
{
31-
ResourceName: "tencentcloud_apm_instance.instance",
41+
ResourceName: "tencentcloud_apm_instance.example",
3242
ImportState: true,
3343
ImportStateVerify: true,
3444
},
@@ -37,23 +47,25 @@ func TestAccTencentCloudApmInstanceResource_basic(t *testing.T) {
3747
}
3848

3949
const testAccApmInstance = `
40-
41-
resource "tencentcloud_apm_instance" "instance" {
42-
name = "terraform-test"
43-
description = "for terraform test"
44-
trace_duration = 15
45-
span_daily_counters = 20
50+
resource "tencentcloud_apm_instance" "example" {
51+
name = "tf-example"
52+
description = "desc."
53+
trace_duration = 15
54+
span_daily_counters = 0
55+
tags = {
56+
createdBy = "terraform"
57+
}
4658
}
47-
4859
`
4960

5061
const testAccApmInstanceUpdate = `
51-
52-
resource "tencentcloud_apm_instance" "instance" {
53-
name = "terraform-for-test"
54-
description = "for terraform test"
55-
trace_duration = 15
56-
span_daily_counters = 20
62+
resource "tencentcloud_apm_instance" "example" {
63+
name = "tf-example-update"
64+
description = "desc update."
65+
trace_duration = 15
66+
span_daily_counters = 0
67+
tags = {
68+
createdBy = "terraform"
69+
}
5770
}
58-
5971
`

website/docs/r/apm_instance.html.markdown

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,13 @@ Provides a resource to create a apm instance
1616
## Example Usage
1717

1818
```hcl
19-
resource "tencentcloud_apm_instance" "instance" {
20-
name = "terraform-test"
21-
description = "for terraform test"
19+
resource "tencentcloud_apm_instance" "example" {
20+
name = "tf-example"
21+
description = "desc."
2222
trace_duration = 15
23-
span_daily_counters = 20
23+
span_daily_counters = 0
2424
tags = {
25-
"createdBy" = "terraform"
25+
createdBy = "terraform"
2626
}
2727
}
2828
```
@@ -51,6 +51,6 @@ In addition to all arguments above, the following attributes are exported:
5151
apm instance can be imported using the id, e.g.
5252

5353
```
54-
terraform import tencentcloud_apm_instance.instance instance_id
54+
terraform import tencentcloud_apm_instance.example apm-IMVrxXl1K
5555
```
5656

0 commit comments

Comments
 (0)