Skip to content

Commit 20c3f25

Browse files
authored
Feat/support dbbrain modify diag db ins operation (#1662)
* support dbbrain * add tencentcloud_dbbrain_modify_diag_db_instance_operation * support resource: tencentcloud_dbbrain_modify_diag_db_instance_operation * add changelog
1 parent c16995c commit 20c3f25

File tree

14 files changed

+790
-4
lines changed

14 files changed

+790
-4
lines changed

.changelog/1662.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:new-resource
2+
tencentcloud_dbbrain_modify_diag_db_instance_operation
3+
```

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ require (
4343
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp v1.0.589
4444
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.572
4545
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dayu v1.0.335
46-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dbbrain v1.0.542
46+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dbbrain v1.0.634
4747
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dc v1.0.199
4848
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dcdb v1.0.572
4949
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.539

go.sum

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -548,6 +548,10 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dayu v1.0.335 h1:D8qrel
548548
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dayu v1.0.335/go.mod h1:pz4s3nOhoB9cY0+uWzifuwr7lfh/Gvi1rv0ADxpPzD4=
549549
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dbbrain v1.0.542 h1:96OU+NJZKgx6VC7KTu4syZ4I71LwUHLAl5BeKNHanio=
550550
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dbbrain v1.0.542/go.mod h1:3/T0WFIreoZnp4qmZTQwQZImcnwTtYnTMwmsnK/yWhY=
551+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dbbrain v1.0.633 h1:50F5tH6Y0NHuFK2+Fl421mutHujKCVgKKRo41ZL1DHk=
552+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dbbrain v1.0.633/go.mod h1:rzbfBABiU4f0mHjGr55BIQ6OQmigOZ7BpVhEB983JKo=
553+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dbbrain v1.0.634 h1:N/1r8VZ+yHQDIXMn1jCXD16I60eLgG+mayF2/78MFUM=
554+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dbbrain v1.0.634/go.mod h1:Sr4D4on1uTvNzpIN26lGzY/h6svYws7ruFaLVHNfHMY=
551555
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dc v1.0.199 h1:7ShREKvI8ik2YNtLF42JR9x2YEeZS/gZvhIRfpsI8T0=
552556
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dc v1.0.199/go.mod h1:5WGSrlIZJOhwIqPjjafb6vzrPEZieSHPhPMjjGPXOSU=
553557
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dcdb v1.0.572 h1:Yn1ZzciHvRg1V694c70VSZQ9tzbgZHrInvlpqE/M7wM=

tencentcloud/internal/helper/helper.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,11 @@ func DataResourceIdsHash(ids []string) string {
2828
return fmt.Sprintf("%d", hashcode.String(buf.String()))
2929
}
3030

31+
// Generates a hash for the resource
32+
func ResourceIdsHash(ids []string) string {
33+
return DataResourceIdsHash(ids)
34+
}
35+
3136
// HashString hashes a string to a unique hashcode.
3237
//
3338
// This will be removed in v2 without replacement. So we place here instead of import.

tencentcloud/provider.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -921,6 +921,7 @@ TencentDB for DBbrain(dbbrain)
921921
Resource
922922
tencentcloud_dbbrain_sql_filter
923923
tencentcloud_dbbrain_security_audit_log_export_task
924+
tencentcloud_dbbrain_modify_diag_db_instance_operation
924925
925926
Data Transmission Service(DTS)
926927
Data Source
@@ -1760,6 +1761,7 @@ func Provider() terraform.ResourceProvider {
17601761
"tencentcloud_organization_policy_sub_account_attachment": resourceTencentCloudOrganizationPolicySubAccountAttachment(),
17611762
"tencentcloud_dbbrain_sql_filter": resourceTencentCloudDbbrainSqlFilter(),
17621763
"tencentcloud_dbbrain_security_audit_log_export_task": resourceTencentCloudDbbrainSecurityAuditLogExportTask(),
1764+
"tencentcloud_dbbrain_modify_diag_db_instance_operation": resourceTencentCloudDbbrainModifyDiagDbInstanceOperation(),
17631765
"tencentcloud_rum_project": resourceTencentCloudRumProject(),
17641766
"tencentcloud_rum_taw_instance": resourceTencentCloudRumTawInstance(),
17651767
"tencentcloud_rum_whitelist": resourceTencentCloudRumWhitelist(),
Lines changed: 166 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,166 @@
1+
/*
2+
Provides a resource to create a dbbrain modify_diag_db_instance_conf
3+
4+
Example Usage
5+
6+
```hcl
7+
resource "tencentcloud_dbbrain_modify_diag_db_instance_operation" "on" {
8+
instance_confs {
9+
daily_inspection = "Yes"
10+
overview_display = "Yes"
11+
}
12+
product = "mysql"
13+
instance_ids = ["%s"]
14+
}
15+
```
16+
17+
```hcl
18+
resource "tencentcloud_dbbrain_modify_diag_db_instance_operation" "off" {
19+
instance_confs {
20+
daily_inspection = "No"
21+
overview_display = "No"
22+
}
23+
product = "mysql"
24+
instance_ids = ["%s"]
25+
}
26+
```
27+
28+
*/
29+
package tencentcloud
30+
31+
import (
32+
"log"
33+
34+
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
35+
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
36+
dbbrain "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dbbrain/v20210527"
37+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
38+
)
39+
40+
func resourceTencentCloudDbbrainModifyDiagDbInstanceOperation() *schema.Resource {
41+
return &schema.Resource{
42+
Create: resourceTencentCloudDbbrainModifyDiagDbInstanceOperationCreate,
43+
Read: resourceTencentCloudDbbrainModifyDiagDbInstanceOperationRead,
44+
Delete: resourceTencentCloudDbbrainModifyDiagDbInstanceOperationDelete,
45+
Schema: map[string]*schema.Schema{
46+
"instance_confs": {
47+
Required: true,
48+
ForceNew: true,
49+
Type: schema.TypeList,
50+
MaxItems: 1,
51+
Description: "Instance configuration, including inspection, overview switch, etc.",
52+
Elem: &schema.Resource{
53+
Schema: map[string]*schema.Schema{
54+
"daily_inspection": {
55+
Type: schema.TypeString,
56+
Optional: true,
57+
Description: "Database inspection switch, Yes/No.",
58+
},
59+
"overview_display": {
60+
Type: schema.TypeString,
61+
Optional: true,
62+
Description: "Instance overview switch, Yes/No.",
63+
},
64+
},
65+
},
66+
},
67+
68+
"regions": {
69+
Optional: true,
70+
ForceNew: true,
71+
Default: "All",
72+
Type: schema.TypeString,
73+
Description: "Effective instance region, the value is All, which means all regions.",
74+
},
75+
76+
"product": {
77+
Required: true,
78+
ForceNew: true,
79+
Type: schema.TypeString,
80+
Description: "Service product type, supported values include: mysql - cloud database MySQL, cynosdb - cloud database CynosDB for MySQL.",
81+
},
82+
83+
"instance_ids": {
84+
Optional: true,
85+
ForceNew: true,
86+
Type: schema.TypeSet,
87+
Elem: &schema.Schema{
88+
Type: schema.TypeString,
89+
},
90+
Description: "Specifies the ID of the instance whose inspection status is changed.",
91+
},
92+
},
93+
}
94+
}
95+
96+
func resourceTencentCloudDbbrainModifyDiagDbInstanceOperationCreate(d *schema.ResourceData, meta interface{}) error {
97+
defer logElapsed("resource.tencentcloud_dbbrain_modify_diag_db_instance_operation.create")()
98+
defer inconsistentCheck(d, meta)()
99+
100+
logId := getLogId(contextNil)
101+
102+
var (
103+
request = dbbrain.NewModifyDiagDBInstanceConfRequest()
104+
operationId string
105+
)
106+
107+
instanceConfs := dbbrain.InstanceConfs{}
108+
if dMap, ok := helper.InterfacesHeadMap(d, "instance_confs"); ok {
109+
if v, ok := dMap["daily_inspection"]; ok {
110+
instanceConfs.DailyInspection = helper.String(v.(string))
111+
}
112+
if v, ok := dMap["overview_display"]; ok {
113+
instanceConfs.OverviewDisplay = helper.String(v.(string))
114+
}
115+
request.InstanceConfs = &instanceConfs
116+
}
117+
118+
if v, ok := d.GetOk("regions"); ok {
119+
request.Regions = helper.String(v.(string))
120+
}
121+
122+
if v, ok := d.GetOk("product"); ok {
123+
request.Product = helper.String(v.(string))
124+
}
125+
126+
if v, ok := d.GetOk("instance_ids"); ok {
127+
instanceIdsSet := v.(*schema.Set).List()
128+
for i := range instanceIdsSet {
129+
instanceIds := instanceIdsSet[i].(string)
130+
request.InstanceIds = append(request.InstanceIds, &instanceIds)
131+
}
132+
}
133+
134+
err := resource.Retry(writeRetryTimeout, func() *resource.RetryError {
135+
result, e := meta.(*TencentCloudClient).apiV3Conn.UseDbbrainClient().ModifyDiagDBInstanceConf(request)
136+
if e != nil {
137+
return retryError(e)
138+
} else {
139+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
140+
}
141+
return nil
142+
})
143+
if err != nil {
144+
log.Printf("[CRITAL]%s operate dbbrain modifyDiagDbInstanceConf failed, reason:%+v", logId, err)
145+
return err
146+
}
147+
148+
operationId = helper.ResourceIdsHash([]string{*instanceConfs.DailyInspection, *instanceConfs.OverviewDisplay})
149+
d.SetId(operationId)
150+
151+
return resourceTencentCloudDbbrainModifyDiagDbInstanceOperationRead(d, meta)
152+
}
153+
154+
func resourceTencentCloudDbbrainModifyDiagDbInstanceOperationRead(d *schema.ResourceData, meta interface{}) error {
155+
defer logElapsed("resource.tencentcloud_dbbrain_modify_diag_db_instance_operation.read")()
156+
defer inconsistentCheck(d, meta)()
157+
158+
return nil
159+
}
160+
161+
func resourceTencentCloudDbbrainModifyDiagDbInstanceOperationDelete(d *schema.ResourceData, meta interface{}) error {
162+
defer logElapsed("resource.tencentcloud_dbbrain_modify_diag_db_instance_operation.delete")()
163+
defer inconsistentCheck(d, meta)()
164+
165+
return nil
166+
}
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
package tencentcloud
2+
3+
import (
4+
"fmt"
5+
"testing"
6+
7+
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
8+
)
9+
10+
func TestAccTencentCloudDbbrainModifyDiagDbInstanceOperationResource_basic_off(t *testing.T) {
11+
t.Parallel()
12+
resource.Test(t, resource.TestCase{
13+
PreCheck: func() {
14+
testAccPreCheck(t)
15+
},
16+
Providers: testAccProviders,
17+
Steps: []resource.TestStep{
18+
{
19+
Config: fmt.Sprintf(testAccDbbrainModifyDiagDbInstanceConf_off, defaultDbBrainInstanceId),
20+
Check: resource.ComposeTestCheckFunc(
21+
resource.TestCheckResourceAttrSet("tencentcloud_dbbrain_modify_diag_db_instance_operation.off", "id"),
22+
resource.TestCheckResourceAttrSet("tencentcloud_dbbrain_modify_diag_db_instance_operation.off", "instance_ids.#"),
23+
resource.TestCheckResourceAttrSet("tencentcloud_dbbrain_modify_diag_db_instance_operation.off", "instance_confs.#"),
24+
resource.TestCheckResourceAttr("tencentcloud_dbbrain_modify_diag_db_instance_operation.off", "instance_confs.0.daily_inspection", "No"),
25+
resource.TestCheckResourceAttr("tencentcloud_dbbrain_modify_diag_db_instance_operation.off", "instance_confs.0.overview_display", "No"),
26+
resource.TestCheckResourceAttr("tencentcloud_dbbrain_modify_diag_db_instance_operation.off", "product", "mysql"),
27+
),
28+
},
29+
},
30+
})
31+
}
32+
33+
func TestAccTencentCloudDbbrainModifyDiagDbInstanceOperationResource_basic_on(t *testing.T) {
34+
t.Parallel()
35+
resource.Test(t, resource.TestCase{
36+
PreCheck: func() {
37+
testAccPreCheck(t)
38+
},
39+
Providers: testAccProviders,
40+
Steps: []resource.TestStep{
41+
{
42+
Config: fmt.Sprintf(testAccDbbrainModifyDiagDbInstanceConf_on, defaultDbBrainInstanceId),
43+
Check: resource.ComposeTestCheckFunc(
44+
resource.TestCheckResourceAttrSet("tencentcloud_dbbrain_modify_diag_db_instance_operation.on", "id"),
45+
resource.TestCheckResourceAttrSet("tencentcloud_dbbrain_modify_diag_db_instance_operation.on", "instance_ids.#"),
46+
resource.TestCheckResourceAttrSet("tencentcloud_dbbrain_modify_diag_db_instance_operation.on", "instance_confs.#"),
47+
resource.TestCheckResourceAttr("tencentcloud_dbbrain_modify_diag_db_instance_operation.on", "instance_confs.0.daily_inspection", "Yes"),
48+
resource.TestCheckResourceAttr("tencentcloud_dbbrain_modify_diag_db_instance_operation.on", "instance_confs.0.overview_display", "Yes"),
49+
resource.TestCheckResourceAttr("tencentcloud_dbbrain_modify_diag_db_instance_operation.on", "product", "mysql"),
50+
),
51+
},
52+
},
53+
})
54+
}
55+
56+
const testAccDbbrainModifyDiagDbInstanceConf_off = `
57+
58+
resource "tencentcloud_dbbrain_modify_diag_db_instance_operation" "off" {
59+
instance_confs {
60+
daily_inspection = "No"
61+
overview_display = "No"
62+
}
63+
product = "mysql"
64+
instance_ids = ["%s"]
65+
}
66+
67+
`
68+
69+
const testAccDbbrainModifyDiagDbInstanceConf_on = `
70+
71+
resource "tencentcloud_dbbrain_modify_diag_db_instance_operation" "on" {
72+
instance_confs {
73+
daily_inspection = "Yes"
74+
overview_display = "Yes"
75+
}
76+
product = "mysql"
77+
instance_ids = ["%s"]
78+
}
79+
80+
`

tencentcloud/service_tencentcloud_dbbrain.go

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package tencentcloud
22

33
import (
44
"context"
5+
"fmt"
56
"log"
67

78
dbbrain "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dbbrain/v20210527"
@@ -646,3 +647,65 @@ func (me *DbbrainService) DescribeDbbrainSlowLogUserSqlAdviceByFilter(ctx contex
646647

647648
return
648649
}
650+
651+
func (me *DbbrainService) DescribeDbbrainDbDiagReportTaskById(ctx context.Context, asyncRequestId *int64, instanceId string, product string) (dbDiagReportTask *dbbrain.HealthReportTask, errRet error) {
652+
logId := getLogId(ctx)
653+
654+
request := dbbrain.NewDescribeDBDiagReportTasksRequest()
655+
request.InstanceIds = []*string{helper.String(instanceId)}
656+
request.Product = &product
657+
658+
defer func() {
659+
if errRet != nil {
660+
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error())
661+
}
662+
}()
663+
664+
ratelimit.Check(request.GetAction())
665+
666+
response, err := me.client.UseDbbrainClient().DescribeDBDiagReportTasks(request)
667+
if err != nil {
668+
errRet = err
669+
return
670+
}
671+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
672+
673+
if asyncRequestId != nil {
674+
for _, task := range response.Response.Tasks {
675+
if *task.AsyncRequestId == *asyncRequestId {
676+
dbDiagReportTask = task
677+
return
678+
}
679+
}
680+
return nil, fmt.Errorf("[ERROR]%sThe asyncRequestId[%v] not found in the qurey results. \n", logId, *asyncRequestId)
681+
}
682+
683+
dbDiagReportTask = response.Response.Tasks[0]
684+
return
685+
}
686+
687+
func (me *DbbrainService) DeleteDbbrainDbDiagReportTaskById(ctx context.Context, asyncRequestId int64, instanceId string, product string) (errRet error) {
688+
logId := getLogId(ctx)
689+
690+
request := dbbrain.NewDeleteDBDiagReportTasksRequest()
691+
request.AsyncRequestIds = []*int64{helper.Int64(asyncRequestId)}
692+
request.InstanceId = &instanceId
693+
request.Product = &product
694+
695+
defer func() {
696+
if errRet != nil {
697+
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error())
698+
}
699+
}()
700+
701+
ratelimit.Check(request.GetAction())
702+
703+
response, err := me.client.UseDbbrainClient().DeleteDBDiagReportTasks(request)
704+
if err != nil {
705+
errRet = err
706+
return
707+
}
708+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
709+
710+
return
711+
}

0 commit comments

Comments
 (0)