Skip to content

Commit

Permalink
fix(apm): [117999788] apm_instance add retry operator (#2707)
Browse files Browse the repository at this point in the history
* add

* add
  • Loading branch information
SevenEarth committed Jul 10, 2024
1 parent cb6bc74 commit 7a1102f
Show file tree
Hide file tree
Showing 5 changed files with 79 additions and 54 deletions.
3 changes: 3 additions & 0 deletions .changelog/2707.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
```release-note:enhancement
resource/tencentcloud_apm_instance: add retry operator
```
54 changes: 32 additions & 22 deletions tencentcloud/services/apm/resource_tc_apm_instance.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,13 +68,13 @@ func resourceTencentCloudApmInstanceCreate(d *schema.ResourceData, meta interfac
defer tccommon.LogElapsed("resource.tencentcloud_apm_instance.create")()
defer tccommon.InconsistentCheck(d, meta)()

logId := tccommon.GetLogId(tccommon.ContextNil)

var (
logId = tccommon.GetLogId(tccommon.ContextNil)
request = apm.NewCreateApmInstanceRequest()
response = apm.NewCreateApmInstanceResponse()
instanceId string
)

if v, ok := d.GetOk("name"); ok {
request.Name = helper.String(v.(string))
}
Expand Down Expand Up @@ -102,9 +102,11 @@ func resourceTencentCloudApmInstanceCreate(d *schema.ResourceData, meta interfac
} else {
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
}

response = result
return nil
})

if err != nil {
log.Printf("[CRITAL]%s create apm instance failed, reason:%+v", logId, err)
return err
Expand All @@ -130,15 +132,24 @@ func resourceTencentCloudApmInstanceRead(d *schema.ResourceData, meta interface{
defer tccommon.LogElapsed("resource.tencentcloud_apm_instance.read")()
defer tccommon.InconsistentCheck(d, meta)()

logId := tccommon.GetLogId(tccommon.ContextNil)

ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
var (
logId = tccommon.GetLogId(tccommon.ContextNil)
ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
service = ApmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
instance *apm.ApmInstanceDetail
instanceId = d.Id()
)

service := ApmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError {
result, err := service.DescribeApmInstanceById(ctx, instanceId)
if err != nil {
return tccommon.RetryError(err)
}

instanceId := d.Id()
instance = result
return nil
})

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

logId := tccommon.GetLogId(tccommon.ContextNil)

request := apm.NewModifyApmInstanceRequest()
var (
logId = tccommon.GetLogId(tccommon.ContextNil)
request = apm.NewModifyApmInstanceRequest()
instanceId = d.Id()
)

needChange := false

instanceId := d.Id()

request.InstanceId = &instanceId

mutableArgs := []string{"name", "description", "trace_duration", "span_daily_counters", "pay_mode"}

for _, v := range mutableArgs {
if d.HasChange(v) {
needChange = true
Expand All @@ -204,7 +213,6 @@ func resourceTencentCloudApmInstanceUpdate(d *schema.ResourceData, meta interfac
}

if needChange {

if v, ok := d.GetOk("name"); ok {
request.Name = helper.String(v.(string))
}
Expand Down Expand Up @@ -232,13 +240,14 @@ func resourceTencentCloudApmInstanceUpdate(d *schema.ResourceData, meta interfac
} else {
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
}

return nil
})

if err != nil {
log.Printf("[CRITAL]%s update apm instance failed, reason:%+v", logId, err)
return err
}

}

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

logId := tccommon.GetLogId(tccommon.ContextNil)
ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId)

service := ApmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
instanceId := d.Id()
var (
logId = tccommon.GetLogId(tccommon.ContextNil)
ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
service = ApmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
instanceId = d.Id()
)

if err := service.DeleteApmInstanceById(ctx, instanceId); err != nil {
return err
Expand Down
16 changes: 8 additions & 8 deletions tencentcloud/services/apm/resource_tc_apm_instance.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@ Provides a resource to create a apm instance
Example Usage

```hcl
resource "tencentcloud_apm_instance" "instance" {
name = "terraform-test"
description = "for terraform test"
trace_duration = 15
span_daily_counters = 20
resource "tencentcloud_apm_instance" "example" {
name = "tf-example"
description = "desc."
trace_duration = 15
span_daily_counters = 0
tags = {
"createdBy" = "terraform"
createdBy = "terraform"
}
}
```
Expand All @@ -21,5 +21,5 @@ Import
apm instance can be imported using the id, e.g.

```
terraform import tencentcloud_apm_instance.instance instance_id
```
terraform import tencentcloud_apm_instance.example apm-IMVrxXl1K
```
48 changes: 30 additions & 18 deletions tencentcloud/services/apm/resource_tc_apm_instance_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
)

// go test -i; go test -test.run TestAccTencentCloudApmInstanceResource_basic -v
func TestAccTencentCloudApmInstanceResource_basic(t *testing.T) {
t.Parallel()
resource.Test(t, resource.TestCase{
Expand All @@ -18,17 +19,26 @@ func TestAccTencentCloudApmInstanceResource_basic(t *testing.T) {
Steps: []resource.TestStep{
{
Config: testAccApmInstance,
Check: resource.ComposeTestCheckFunc(resource.TestCheckResourceAttrSet("tencentcloud_apm_instance.instance", "id")),
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttrSet("tencentcloud_apm_instance.example", "id"),
resource.TestCheckResourceAttr("tencentcloud_apm_instance.example", "name", "tf-example"),
resource.TestCheckResourceAttr("tencentcloud_apm_instance.example", "description", "desc."),
resource.TestCheckResourceAttr("tencentcloud_apm_instance.example", "trace_duration", "15"),
resource.TestCheckResourceAttr("tencentcloud_apm_instance.example", "span_daily_counters", "20"),
),
},
{
Config: testAccApmInstanceUpdate,
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttrSet("tencentcloud_apm_instance.instance", "id"),
resource.TestCheckResourceAttr("tencentcloud_apm_instance.instance", "name", "terraform-for-test"),
resource.TestCheckResourceAttrSet("tencentcloud_apm_instance.example", "id"),
resource.TestCheckResourceAttr("tencentcloud_apm_instance.example", "name", "tf-example-update"),
resource.TestCheckResourceAttr("tencentcloud_apm_instance.example", "description", "desc update."),
resource.TestCheckResourceAttr("tencentcloud_apm_instance.example", "trace_duration", "15"),
resource.TestCheckResourceAttr("tencentcloud_apm_instance.example", "span_daily_counters", "20"),
),
},
{
ResourceName: "tencentcloud_apm_instance.instance",
ResourceName: "tencentcloud_apm_instance.example",
ImportState: true,
ImportStateVerify: true,
},
Expand All @@ -37,23 +47,25 @@ func TestAccTencentCloudApmInstanceResource_basic(t *testing.T) {
}

const testAccApmInstance = `
resource "tencentcloud_apm_instance" "instance" {
name = "terraform-test"
description = "for terraform test"
trace_duration = 15
span_daily_counters = 20
resource "tencentcloud_apm_instance" "example" {
name = "tf-example"
description = "desc."
trace_duration = 15
span_daily_counters = 0
tags = {
createdBy = "terraform"
}
}
`

const testAccApmInstanceUpdate = `
resource "tencentcloud_apm_instance" "instance" {
name = "terraform-for-test"
description = "for terraform test"
trace_duration = 15
span_daily_counters = 20
resource "tencentcloud_apm_instance" "example" {
name = "tf-example-update"
description = "desc update."
trace_duration = 15
span_daily_counters = 0
tags = {
createdBy = "terraform"
}
}
`
12 changes: 6 additions & 6 deletions website/docs/r/apm_instance.html.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,13 @@ Provides a resource to create a apm instance
## Example Usage

```hcl
resource "tencentcloud_apm_instance" "instance" {
name = "terraform-test"
description = "for terraform test"
resource "tencentcloud_apm_instance" "example" {
name = "tf-example"
description = "desc."
trace_duration = 15
span_daily_counters = 20
span_daily_counters = 0
tags = {
"createdBy" = "terraform"
createdBy = "terraform"
}
}
```
Expand Down Expand Up @@ -51,6 +51,6 @@ In addition to all arguments above, the following attributes are exported:
apm instance can be imported using the id, e.g.

```
terraform import tencentcloud_apm_instance.instance instance_id
terraform import tencentcloud_apm_instance.example apm-IMVrxXl1K
```

0 comments on commit 7a1102f

Please sign in to comment.