Skip to content

Commit faccfce

Browse files
authored
feat: cynosdb - support param_items and datasource default params. (#888)
* feat: cynosdb - support param_items and datasource default params. * fix: datasource mysql params - testcase
1 parent 0cf0afe commit faccfce

File tree

17 files changed

+3309
-127
lines changed

17 files changed

+3309
-127
lines changed

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@ require (
3030
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb v1.0.283
3131
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit v1.0.199
3232
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls v1.0.291
33-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.358
33+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.359
3434
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.351
35-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.199
35+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.359
3636
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dayu v1.0.335
3737
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dc v1.0.199
3838
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.294

go.sum

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -494,14 +494,16 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.351/go.mod
494494
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.353 h1:rFkcKuLFxt2xolSWbyeznetTBw9Cyhe1ycILmEkE1Pk=
495495
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.353/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
496496
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.357/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
497-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.358 h1:RYuj1gziHnMubqjsq6Be7+mv8QhSboD4FKYauEXWheI=
498-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.358/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
497+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.359 h1:m7Ga+AAWcngpWVIU6TjtyJ2MZupZvyY4soTNKDYQVVs=
498+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.359/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
499499
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.199 h1:ajgJogYSIQ5u1PIbiV5nsvr5K0fYpm1/T7Dy+mxEM6U=
500500
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.199/go.mod h1:AqyM/ZZMD7q5mHBqNY9YImbSpEpoEe7E/vrTbUWX+po=
501501
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.351 h1:zqJsH5pxGT57La7NAOOyMQxsuM11pupNBwV1dzXcT24=
502502
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.351/go.mod h1:IZH6xMdFwRrdxy6nEOdxdor+1AwDoOu/GG4PfPajwzM=
503503
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.199 h1:L0twFkJMOZzLkX08w8S14nX6oanD8YxMQDIaYXVim6A=
504504
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.199/go.mod h1:AvfGfE5JXkyMV6uGd6B++SIDp+VV/SSphg1q2RiANFw=
505+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.359 h1:cNKqelPgUxrJkLY0Azd2QHr/UMYOPPnmqs88clt2akk=
506+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.359/go.mod h1:GlTYjlrf8EKEMu+Z2MXfaM2/nHGUBBF/huBBJqGyGwI=
505507
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dayu v1.0.199 h1:CzZEt6l0qDjZUW8D8rUNQ/sKw6z6oYYdWuby3hlsn8g=
506508
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dayu v1.0.199/go.mod h1:pz4s3nOhoB9cY0+uWzifuwr7lfh/Gvi1rv0ADxpPzD4=
507509
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dayu v1.0.335 h1:D8qrelkK5udv8RzJJIABMzItGIyaZoYnxEVeIsYqiNw=
Lines changed: 163 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,163 @@
1+
/*
2+
Provide a datasource to query default mysql parameters.
3+
4+
Example Usage
5+
6+
```hcl
7+
resource "tencentcloud_mysql_default_params" "mysql_57" {
8+
db_version = "5.7"
9+
}
10+
```
11+
12+
13+
*/
14+
package tencentcloud
15+
16+
import (
17+
"context"
18+
"fmt"
19+
"math/rand"
20+
21+
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
22+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
23+
)
24+
25+
func datasourceTencentCloudMysqlDefaultParams() *schema.Resource {
26+
return &schema.Resource{
27+
Read: datasourceTencentCloudMysqlDefaultParamsRead,
28+
Importer: &schema.ResourceImporter{
29+
State: schema.ImportStatePassthrough,
30+
},
31+
Schema: map[string]*schema.Schema{
32+
"db_version": {
33+
Type: schema.TypeString,
34+
Optional: true,
35+
Description: "MySQL database version.",
36+
},
37+
//"template_type": {
38+
// Type: schema.TypeString,
39+
// Optional: true,
40+
// Description: "",
41+
//},
42+
"result_output_file": {
43+
Type: schema.TypeString,
44+
Optional: true,
45+
Description: "Used for save results.",
46+
},
47+
"param_list": {
48+
Type: schema.TypeList,
49+
Computed: true,
50+
Description: "List of param detail.",
51+
Elem: &schema.Resource{
52+
Schema: map[string]*schema.Schema{
53+
"current_value": {
54+
Type: schema.TypeString,
55+
Computed: true,
56+
Description: "Param current value.",
57+
},
58+
"default": {
59+
Type: schema.TypeString,
60+
Computed: true,
61+
Description: "Param default value.",
62+
},
63+
"description": {
64+
Type: schema.TypeString,
65+
Computed: true,
66+
Description: "Param description.",
67+
},
68+
"enum_value": {
69+
Type: schema.TypeList,
70+
Computed: true,
71+
Elem: &schema.Schema{Type: schema.TypeString},
72+
Description: "Params available values if type of param is enum.",
73+
},
74+
"max": {
75+
Type: schema.TypeInt,
76+
Computed: true,
77+
Description: "Param maximum value if type of param is integer.",
78+
},
79+
"min": {
80+
Type: schema.TypeInt,
81+
Computed: true,
82+
Description: "Param minimum value if type of param is integer.",
83+
},
84+
"name": {
85+
Type: schema.TypeString,
86+
Computed: true,
87+
Description: "Param key name.",
88+
},
89+
"need_reboot": {
90+
Type: schema.TypeInt,
91+
Computed: true,
92+
Description: "Indicates weather the database instance reboot if param modified.",
93+
},
94+
"param_type": {
95+
Type: schema.TypeString,
96+
Computed: true,
97+
Description: "Type of param.",
98+
},
99+
},
100+
},
101+
},
102+
},
103+
}
104+
}
105+
106+
func datasourceTencentCloudMysqlDefaultParamsRead(d *schema.ResourceData, meta interface{}) error {
107+
defer logElapsed("datasource.tencentcloud_mysql_default_params.read")()
108+
defer inconsistentCheck(d, meta)()
109+
110+
logId := getLogId(contextNil)
111+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
112+
113+
client := meta.(*TencentCloudClient).apiV3Conn
114+
service := MysqlService{client: client}
115+
116+
engineVersion := d.Get("db_version").(string)
117+
118+
params, err := service.DescribeDefaultParameters(ctx, engineVersion)
119+
120+
if err != nil {
121+
d.SetId("")
122+
return err
123+
}
124+
125+
d.SetId(fmt.Sprintf("mysql-params-%d", rand.Intn(1000)))
126+
127+
paramList := make([]map[string]interface{}, 0, len(params))
128+
129+
for i := range params {
130+
item := params[i]
131+
param := map[string]interface{}{
132+
"current_value": item.CurrentValue,
133+
"default": item.Default,
134+
"description": item.Description,
135+
"max": item.Max,
136+
"min": item.Min,
137+
"name": item.Name,
138+
"need_reboot": item.NeedReboot,
139+
"param_type": item.ParamType,
140+
}
141+
142+
if item.EnumValue != nil {
143+
param["enum_value"] = helper.StringsInterfaces(item.EnumValue)
144+
}
145+
paramList = append(paramList, param)
146+
}
147+
148+
if len(paramList) > 0 {
149+
err = d.Set("param_list", paramList)
150+
if err != nil {
151+
return err
152+
}
153+
}
154+
155+
output, ok := d.GetOk("result_output_file")
156+
if ok && output.(string) != "" {
157+
if e := writeToFile(output.(string), params); e != nil {
158+
return e
159+
}
160+
}
161+
162+
return nil
163+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package tencentcloud
2+
3+
import (
4+
"testing"
5+
6+
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
7+
)
8+
9+
func TestAccTencentCloudDataSourceMysqlDefaultParams(t *testing.T) {
10+
t.Parallel()
11+
resource.Test(t, resource.TestCase{
12+
PreCheck: func() { testAccPreCheck(t) },
13+
Providers: testAccProviders,
14+
Steps: []resource.TestStep{
15+
{
16+
Config: testAccDataSourceMysqlDefaultParamBasic,
17+
Check: resource.ComposeAggregateTestCheckFunc(
18+
resource.TestCheckResourceAttr("data.tencentcloud_mysql_default_params.mysql_57", "db_version", "5.7"),
19+
resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_default_params.mysql_57", "param_list.#"),
20+
resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_default_params.mysql_57", "param_list.0.current_value"),
21+
resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_default_params.mysql_57", "param_list.0.default"),
22+
resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_default_params.mysql_57", "param_list.0.description"),
23+
resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_default_params.mysql_57", "param_list.0.max"),
24+
resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_default_params.mysql_57", "param_list.0.min"),
25+
resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_default_params.mysql_57", "param_list.0.name"),
26+
resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_default_params.mysql_57", "param_list.0.need_reboot"),
27+
resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_default_params.mysql_57", "param_list.0.param_type"),
28+
),
29+
},
30+
},
31+
})
32+
}
33+
34+
const testAccDataSourceMysqlDefaultParamBasic = `
35+
data "tencentcloud_mysql_default_params" "mysql_57" {
36+
db_version = "5.7"
37+
}
38+
`

tencentcloud/extension_cynosdb.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,30 @@ func TencentCynosdbClusterBaseInfo() map[string]*schema.Schema {
316316
},
317317
},
318318
},
319+
"param_items": {
320+
Type: schema.TypeList,
321+
Optional: true,
322+
Description: "Specify parameter list of database. Use `data.tencentcloud_mysql_default_params` to query available parameter details.",
323+
Elem: &schema.Resource{
324+
Schema: map[string]*schema.Schema{
325+
"name": {
326+
Type: schema.TypeString,
327+
Required: true,
328+
Description: "Name of param, e.g. `character_set_server`.",
329+
},
330+
"old_value": {
331+
Type: schema.TypeString,
332+
Optional: true,
333+
Description: "Param old value, indicates the value which already set, this value is required when modifying current_value.",
334+
},
335+
"current_value": {
336+
Type: schema.TypeString,
337+
Required: true,
338+
Description: "Param expected value to set.",
339+
},
340+
},
341+
},
342+
},
319343
}
320344

321345
for k, v := range TencentCynosdbInstanceBaseInfo() {

tencentcloud/provider.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -379,6 +379,7 @@ MySQL
379379
tencentcloud_mysql_backup_list
380380
tencentcloud_mysql_instance
381381
tencentcloud_mysql_parameter_list
382+
tencentcloud_mysql_default_params
382383
tencentcloud_mysql_zone_config
383384
384385
Resource
@@ -758,6 +759,7 @@ func Provider() terraform.ResourceProvider {
758759
"tencentcloud_mysql_backup_list": dataSourceTencentMysqlBackupList(),
759760
"tencentcloud_mysql_zone_config": dataSourceTencentMysqlZoneConfig(),
760761
"tencentcloud_mysql_parameter_list": dataSourceTencentCloudMysqlParameterList(),
762+
"tencentcloud_mysql_default_params": datasourceTencentCloudMysqlDefaultParams(),
761763
"tencentcloud_mysql_instance": dataSourceTencentCloudMysqlInstance(),
762764
"tencentcloud_cos_bucket_object": dataSourceTencentCloudCosBucketObject(),
763765
"tencentcloud_cos_buckets": dataSourceTencentCloudCosBuckets(),

0 commit comments

Comments
 (0)