Skip to content

Commit 137a51f

Browse files
committed
add cdb resource
1 parent fd52780 commit 137a51f

25 files changed

+6551
-1992
lines changed

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,14 @@ require (
2828
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam v1.0.409
2929
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cat v1.0.520
3030
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cbs v1.0.493
31-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb v1.0.409
31+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb v1.0.576
3232
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdn v1.0.539
3333
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfs v1.0.562
3434
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka v1.0.403
3535
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb v1.0.445
3636
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit v1.0.544
3737
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls v1.0.412
38-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.573
38+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.576
3939
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.553
4040
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.572
4141
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dayu v1.0.335

go.sum

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -470,6 +470,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cbs v1.0.493 h1:CDH65MO
470470
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cbs v1.0.493/go.mod h1:Dzo3Z7Ln3bJ9jsgTIH1GslwuW+D6hbEJ1f1Ju4x/dcU=
471471
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb v1.0.409 h1:fKFSxvMzS8T+z2z2qm67dgTClnkryeVTykclVkHh3qE=
472472
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb v1.0.409/go.mod h1:q89YBv3T1bzENpcovtwnjxfVn9vx9pCYAssp0HPuivU=
473+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb v1.0.576 h1:0Ob8XAXco+lp19HE3CCH/oQBxq6SdhUB/5O842dJ9Ec=
474+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb v1.0.576/go.mod h1:kbILC5/kqFl+0UK8X9PGP3ubvZi8VReQLQYxhVw8ZH0=
473475
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdn v1.0.539 h1:0L6nZhT2bToTc/n1z3HOpNgdu5VX5ulmqIuPY+8UozA=
474476
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdn v1.0.539/go.mod h1:6Syk7W5fdDf0BLvX+RXL5obQ6unkt3Id4aN2QqVrV6U=
475477
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfs v1.0.199 h1:VyOKZOlgTXW0szboWhI1N35khPsaHE4CyH9pf42o7P8=
@@ -540,14 +542,16 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.567 h1:0IRm
540542
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.567/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
541543
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.569 h1:ucwAQxGji/1kHSsnFf/w/BJ35rU7lFaUAq+uUKzwufE=
542544
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.569/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
543-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.572 h1:xbcb/bC/cSWpfLB3TW+GBUdIcY/x+T+VrBgsz/jxv5Q=
544-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.572/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
545545
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.571 h1:V4JQJTavl2X8aRBRBBh4vTOInuzrbqQzHlFitmu782U=
546546
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.571/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
547547
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.572 h1:xbcb/bC/cSWpfLB3TW+GBUdIcY/x+T+VrBgsz/jxv5Q=
548+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.572 h1:xbcb/bC/cSWpfLB3TW+GBUdIcY/x+T+VrBgsz/jxv5Q=
549+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.572/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
548550
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.572/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
549551
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.573 h1:H2p5AhpSC9BVc5+bLsB5v/ktDx1tLw+SAChHHTpKzfY=
550552
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.573/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
553+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.576 h1:6L4MeAnCk1NkuKoSfJvNPxqOrXq/HG9FqV3jl6i5t+w=
554+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.576/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
551555
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.445 h1:Bh7XD0ypNMHYyBOM8hhKsSu+y0VVKUnJVS+YKKhfpGg=
552556
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.445/go.mod h1:jMDD351efCFpT1+KVFbcpu6SbmP4TYmp4qkoCfr63nQ=
553557
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.553 h1:Pl1kYgFhJp0QSoVFSzRsiGk+HfEAkBTQg7+O60tytNA=

tencentcloud/data_source_tc_mysql_zone_config.go

Lines changed: 30 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -187,22 +187,22 @@ func dataSourceTencentMysqlZoneConfigRead(d *schema.ResourceData, meta interface
187187
if err != nil {
188188
return fmt.Errorf("api[DescribeBackups]fail, return %s", err.Error())
189189
}
190-
var regionItem *cdb.RegionSellConf
191-
for _, regionItem = range sellConfigures {
190+
var regionItem *cdb.CdbRegionSellConf
191+
192+
for _, regionItem = range sellConfigures.Regions {
192193
if *regionItem.Region == region {
193194
break
194195
}
195196
}
196197
if regionItem == nil {
197198
return nil
198199
}
200+
199201
var zoneConfigs []interface{}
200-
for _, sellItem := range regionItem.ZonesConf {
201-
if *sellItem.Status != ZONE_SELL_STATUS_ONLINE && *sellItem.Status != ZONE_SELL_STATUS_NEW {
202-
continue
203-
}
204-
var zoneConfig = make(map[string]interface{})
205-
zoneConfig["name"] = *sellItem.Zone
202+
var zoneConfig = make(map[string]interface{})
203+
204+
for _, sellItem := range regionItem.RegionConfig {
205+
zoneConfig["name"] = regionItem.RegionName
206206
if sellItem.HourInstanceSaleMaxNum != nil {
207207
zoneConfig["hour_instance_sale_max_num"] = *sellItem.HourInstanceSaleMaxNum
208208
}
@@ -256,9 +256,8 @@ func dataSourceTencentMysqlZoneConfigRead(d *schema.ResourceData, meta interface
256256
zoneConfig["disaster_recovery_zones"] = disasterRecoveryZones
257257

258258
var (
259-
slaveDeployModes []int
260-
firstSlaveZones, secondSlaveZones, engineVersions, remoteRoZones []string
261-
sells []interface{}
259+
slaveDeployModes []int
260+
firstSlaveZones, secondSlaveZones, remoteRoZones []string
262261
)
263262
if sellItem.ZoneConf != nil {
264263
for _, mode := range sellItem.ZoneConf.DeployMode {
@@ -278,22 +277,28 @@ func dataSourceTencentMysqlZoneConfigRead(d *schema.ResourceData, meta interface
278277
zoneConfig["first_slave_zones"] = firstSlaveZones
279278
zoneConfig["second_slave_zones"] = secondSlaveZones
280279
zoneConfig["remote_ro_zones"] = remoteRoZones
280+
}
281281

282-
for _, mysqlConfigs := range sellItem.SellType {
283-
for _, strPtr := range mysqlConfigs.EngineVersion {
284-
engineVersions = append(engineVersions, *strPtr)
285-
}
286-
for _, mysqlConfig := range mysqlConfigs.Configs {
287-
var showConfigMap = make(map[string]interface{})
288-
showConfigMap["cdb_type"] = *mysqlConfig.CdbType
289-
showConfigMap["mem_size"] = int(*mysqlConfig.Memory)
290-
showConfigMap["max_volume_size"] = int(*mysqlConfig.VolumeMax)
291-
showConfigMap["min_volume_size"] = int(*mysqlConfig.VolumeMin)
292-
showConfigMap["volume_step"] = int(*mysqlConfig.VolumeStep)
293-
showConfigMap["qps"] = int(*mysqlConfig.Qps)
294-
sells = append(sells, showConfigMap)
295-
}
282+
var (
283+
engineVersions []string
284+
sells []interface{}
285+
)
286+
287+
for _, sellItem := range sellConfigures.Configs {
288+
if *sellItem.Status != ZONE_SELL_STATUS_ONLINE {
289+
continue
296290
}
291+
engineVersions = append(engineVersions, *sellItem.EngineType)
292+
293+
var showConfigMap = make(map[string]interface{})
294+
showConfigMap["cdb_type"] = *sellItem.DeviceType
295+
showConfigMap["mem_size"] = int(*sellItem.Memory)
296+
showConfigMap["max_volume_size"] = int(*sellItem.VolumeMax)
297+
showConfigMap["min_volume_size"] = int(*sellItem.VolumeMin)
298+
showConfigMap["volume_step"] = int(*sellItem.VolumeStep)
299+
showConfigMap["qps"] = int(*sellItem.Iops)
300+
sells = append(sells, showConfigMap)
301+
297302
zoneConfig["engine_versions"] = engineVersions
298303
zoneConfig["sells"] = sells
299304

tencentcloud/extension_mysql.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
package tencentcloud
22

33
const (
4-
ZONE_SELL_STATUS_ONLINE = 1
5-
ZONE_SELL_STATUS_NEW = 2
4+
ZONE_SELL_STATUS_ONLINE = 0
65
)
76

87
var MYSQL_ALLOW_BACKUP_TIME = []string{"02:00-06:00", "06:00-10:00", "10:00-14:00", "14:00-18:00", "18:00-22:00", "22:00-02:00"}

tencentcloud/provider.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -427,6 +427,10 @@ TencentDB for MySQL(cdb)
427427
tencentcloud_mysql_account_privilege
428428
tencentcloud_mysql_backup_policy
429429
tencentcloud_mysql_time_window
430+
tencentcloud_mysql_param_template
431+
tencentcloud_mysql_deploy_group
432+
tencentcloud_mysql_security_groups_attachment
433+
tencentcloud_mysql_local_binlog_config
430434
431435
Cloud Monitor(Monitor)
432436
Data Source
@@ -1335,6 +1339,10 @@ func Provider() terraform.ResourceProvider {
13351339
"tencentcloud_mysql_instance": resourceTencentCloudMysqlInstance(),
13361340
"tencentcloud_mysql_readonly_instance": resourceTencentCloudMysqlReadonlyInstance(),
13371341
"tencentcloud_mysql_time_window": resourceTencentCloudMysqlTimeWindow(),
1342+
"tencentcloud_mysql_param_template": resourceTencentCloudMysqlParamTemplate(),
1343+
"tencentcloud_mysql_security_groups_attachment": resourceTencentCloudMysqlSecurityGroupsAttachment(),
1344+
"tencentcloud_mysql_deploy_group": resourceTencentCloudMysqlDeployGroup(),
1345+
"tencentcloud_mysql_local_binlog_config": resourceTencentCloudMysqlLocalBinlogConfig(),
13381346
"tencentcloud_cos_bucket": resourceTencentCloudCosBucket(),
13391347
"tencentcloud_cos_bucket_object": resourceTencentCloudCosBucketObject(),
13401348
"tencentcloud_cfs_file_system": resourceTencentCloudCfsFileSystem(),
Lines changed: 234 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,234 @@
1+
/*
2+
Provides a resource to create a mysql deploy_group
3+
4+
Example Usage
5+
6+
```hcl
7+
resource "tencentcloud_mysql_deploy_group" "deploy_group" {
8+
deploy_group_name = "terrform-deploy"
9+
description = "deploy test"
10+
limit_num = 1
11+
dev_class = ["TS85"]
12+
}
13+
```
14+
15+
Import
16+
17+
mysql deploy_group can be imported using the id, e.g.
18+
19+
```
20+
terraform import tencentcloud_mysql_deploy_group.deploy_group deploy_group_id
21+
```
22+
*/
23+
package tencentcloud
24+
25+
import (
26+
"context"
27+
"fmt"
28+
"log"
29+
30+
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
31+
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
32+
mysql "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320"
33+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
34+
)
35+
36+
func resourceTencentCloudMysqlDeployGroup() *schema.Resource {
37+
return &schema.Resource{
38+
Create: resourceTencentCloudMysqlDeployGroupCreate,
39+
Read: resourceTencentCloudMysqlDeployGroupRead,
40+
Update: resourceTencentCloudMysqlDeployGroupUpdate,
41+
Delete: resourceTencentCloudMysqlDeployGroupDelete,
42+
Importer: &schema.ResourceImporter{
43+
State: schema.ImportStatePassthrough,
44+
},
45+
Schema: map[string]*schema.Schema{
46+
"deploy_group_name": {
47+
Required: true,
48+
Type: schema.TypeString,
49+
Description: "The name of deploy group. the maximum length cannot exceed 60 characters.",
50+
},
51+
52+
"description": {
53+
Optional: true,
54+
Type: schema.TypeString,
55+
Description: "The description of deploy group. the maximum length cannot exceed 200 characters.",
56+
},
57+
58+
"limit_num": {
59+
Optional: true,
60+
Type: schema.TypeInt,
61+
Description: "The limit on the number of instances on the same physical machine in deploy group affinity policy 1.",
62+
},
63+
64+
"dev_class": {
65+
Optional: true,
66+
Type: schema.TypeSet,
67+
Elem: &schema.Schema{
68+
Type: schema.TypeString,
69+
},
70+
Description: "The device class of deploy group. optional value is SH12+SH02, TS85, etc.",
71+
},
72+
},
73+
}
74+
}
75+
76+
func resourceTencentCloudMysqlDeployGroupCreate(d *schema.ResourceData, meta interface{}) error {
77+
defer logElapsed("resource.tencentcloud_mysql_deploy_group.create")()
78+
defer inconsistentCheck(d, meta)()
79+
80+
logId := getLogId(contextNil)
81+
82+
var (
83+
request = mysql.NewCreateDeployGroupRequest()
84+
response = mysql.NewCreateDeployGroupResponse()
85+
deployGroupId string
86+
)
87+
if v, ok := d.GetOk("deploy_group_name"); ok {
88+
request.DeployGroupName = helper.String(v.(string))
89+
}
90+
91+
if v, ok := d.GetOk("description"); ok {
92+
request.Description = helper.String(v.(string))
93+
}
94+
95+
if v, _ := d.GetOk("limit_num"); v != nil {
96+
request.LimitNum = helper.IntInt64(v.(int))
97+
}
98+
99+
if v, ok := d.GetOk("dev_class"); ok {
100+
devClassSet := v.(*schema.Set).List()
101+
for i := range devClassSet {
102+
devClass := devClassSet[i].(string)
103+
request.DevClass = append(request.DevClass, &devClass)
104+
}
105+
}
106+
107+
err := resource.Retry(writeRetryTimeout, func() *resource.RetryError {
108+
result, e := meta.(*TencentCloudClient).apiV3Conn.UseMysqlClient().CreateDeployGroup(request)
109+
if e != nil {
110+
return retryError(e)
111+
} else {
112+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
113+
}
114+
response = result
115+
return nil
116+
})
117+
if err != nil {
118+
log.Printf("[CRITAL]%s create mysql deployGroup failed, reason:%+v", logId, err)
119+
return err
120+
}
121+
122+
deployGroupId = *response.Response.DeployGroupId
123+
d.SetId(deployGroupId)
124+
125+
return resourceTencentCloudMysqlDeployGroupRead(d, meta)
126+
}
127+
128+
func resourceTencentCloudMysqlDeployGroupRead(d *schema.ResourceData, meta interface{}) error {
129+
defer logElapsed("resource.tencentcloud_mysql_deploy_group.read")()
130+
defer inconsistentCheck(d, meta)()
131+
132+
logId := getLogId(contextNil)
133+
134+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
135+
136+
service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn}
137+
138+
deployGroupId := d.Id()
139+
140+
deployGroup, err := service.DescribeMysqlDeployGroupById(ctx, deployGroupId)
141+
if err != nil {
142+
return err
143+
}
144+
145+
if deployGroup == nil {
146+
d.SetId("")
147+
log.Printf("[WARN]%s resource `tencentcloud_mysql_deploy_group` [%s] not found, please check if it has been deleted.\n", logId, d.Id())
148+
return nil
149+
150+
}
151+
if deployGroup.DeployGroupName != nil {
152+
_ = d.Set("deploy_group_name", deployGroup.DeployGroupName)
153+
}
154+
155+
if deployGroup.Description != nil {
156+
_ = d.Set("description", deployGroup.Description)
157+
}
158+
159+
if deployGroup.LimitNum != nil {
160+
_ = d.Set("limit_num", deployGroup.LimitNum)
161+
}
162+
163+
if deployGroup.DevClass != nil {
164+
_ = d.Set("dev_class", []*string{deployGroup.DevClass})
165+
}
166+
167+
return nil
168+
}
169+
170+
func resourceTencentCloudMysqlDeployGroupUpdate(d *schema.ResourceData, meta interface{}) error {
171+
defer logElapsed("resource.tencentcloud_mysql_deploy_group.update")()
172+
defer inconsistentCheck(d, meta)()
173+
174+
logId := getLogId(contextNil)
175+
176+
request := mysql.NewModifyNameOrDescByDpIdRequest()
177+
178+
deployGroupId := d.Id()
179+
180+
request.DeployGroupId = &deployGroupId
181+
182+
immutableArgs := []string{"limit_num", "dev_class"}
183+
184+
for _, v := range immutableArgs {
185+
if d.HasChange(v) {
186+
return fmt.Errorf("argument `%s` cannot be changed", v)
187+
}
188+
}
189+
190+
if d.HasChange("deploy_group_name") {
191+
if v, ok := d.GetOk("deploy_group_name"); ok {
192+
request.DeployGroupName = helper.String(v.(string))
193+
}
194+
}
195+
196+
if d.HasChange("description") {
197+
if v, ok := d.GetOk("description"); ok {
198+
request.Description = helper.String(v.(string))
199+
}
200+
}
201+
202+
err := resource.Retry(writeRetryTimeout, func() *resource.RetryError {
203+
result, e := meta.(*TencentCloudClient).apiV3Conn.UseMysqlClient().ModifyNameOrDescByDpId(request)
204+
if e != nil {
205+
return retryError(e)
206+
} else {
207+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
208+
}
209+
return nil
210+
})
211+
if err != nil {
212+
log.Printf("[CRITAL]%s update mysql deployGroup failed, reason:%+v", logId, err)
213+
return err
214+
}
215+
216+
return resourceTencentCloudMysqlDeployGroupRead(d, meta)
217+
}
218+
219+
func resourceTencentCloudMysqlDeployGroupDelete(d *schema.ResourceData, meta interface{}) error {
220+
defer logElapsed("resource.tencentcloud_mysql_deploy_group.delete")()
221+
defer inconsistentCheck(d, meta)()
222+
223+
logId := getLogId(contextNil)
224+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
225+
226+
service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn}
227+
deployGroupId := d.Id()
228+
229+
if err := service.DeleteMysqlDeployGroupById(ctx, deployGroupId); err != nil {
230+
return err
231+
}
232+
233+
return nil
234+
}

0 commit comments

Comments
 (0)