Skip to content

Commit 1779b82

Browse files
authored
fix: redis - support field: param template (#1249)
1 parent 1de439f commit 1779b82

File tree

11 files changed

+6698
-937
lines changed

11 files changed

+6698
-937
lines changed

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ require (
3333
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb v1.0.445
3434
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit v1.0.199
3535
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls v1.0.412
36-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.488
36+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.490
3737
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.445
3838
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.488
3939
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dayu v1.0.335
@@ -49,7 +49,7 @@ require (
4949
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor v1.0.443
5050
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/postgres v1.0.391
5151
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/privatedns v1.0.290
52-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/redis v1.0.199
52+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/redis v1.0.490
5353
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/scf v1.0.275
5454
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver v1.0.406
5555
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl v1.0.199

go.sum

Lines changed: 4 additions & 27 deletions
Large diffs are not rendered by default.

tencentcloud/resource_tc_redis_instance.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,11 @@ func resourceTencentCloudRedisInstance() *schema.Resource {
214214
Default: 6379,
215215
Description: "The port used to access a redis instance. The default value is 6379. And this value can't be changed after creation, or the Redis instance will be recreated.",
216216
},
217+
"params_template_id": {
218+
Type: schema.TypeString,
219+
Optional: true,
220+
Description: "Specify params template id. If not set, will use default template.",
221+
},
217222
"tags": {
218223
Type: schema.TypeMap,
219224
Optional: true,
@@ -322,6 +327,7 @@ func resourceTencentCloudRedisInstanceCreate(d *schema.ResourceData, meta interf
322327
port := d.Get("port").(int)
323328
chargeType := d.Get("charge_type").(string)
324329
autoRenewFlag := d.Get("auto_renew_flag").(int)
330+
paramsTemplateId := d.Get("params_template_id").(string)
325331
chargeTypeID := REDIS_CHARGE_TYPE_ID[chargeType]
326332
var replicasReadonly bool
327333
if v, ok := d.GetOk("replicas_read_only"); ok {
@@ -464,6 +470,7 @@ func resourceTencentCloudRedisInstanceCreate(d *schema.ResourceData, meta interf
464470
noAuth,
465471
autoRenewFlag,
466472
replicasReadonly,
473+
paramsTemplateId,
467474
)
468475

469476
if err != nil {
@@ -790,6 +797,23 @@ func resourceTencentCloudRedisInstanceUpdate(d *schema.ResourceData, meta interf
790797
d.SetPartial("password")
791798
}
792799

800+
if d.HasChange("params_template_id") {
801+
request := redis.NewApplyParamsTemplateRequest()
802+
request.InstanceIds = []*string{&id}
803+
request.TemplateId = helper.String(d.Get("params_template_id").(string))
804+
err := resource.Retry(writeRetryTimeout, func() *resource.RetryError {
805+
_, err := redisService.ApplyParamsTemplate(ctx, request)
806+
if err != nil {
807+
return retryError(err, redis.FAILEDOPERATION_SYSTEMERROR, redis.RESOURCEUNAVAILABLE_INSTANCELOCKEDERROR)
808+
}
809+
return nil
810+
})
811+
812+
if err != nil {
813+
return err
814+
}
815+
}
816+
793817
if d.HasChange("project_id") {
794818
projectId := d.Get("project_id").(int)
795819
err := redisService.ModifyInstanceProjectId(ctx, id, int64(projectId))

tencentcloud/resource_tc_redis_instance_test.go

Lines changed: 92 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,32 @@ func TestAccTencentCloudRedisInstance(t *testing.T) {
217217
})
218218
}
219219

220+
func TestAccTencentCloudRedisInstanceParam(t *testing.T) {
221+
resource.Test(t, resource.TestCase{
222+
PreCheck: func() { testAccPreCheck(t) },
223+
Providers: testAccProviders,
224+
CheckDestroy: testAccTencentCloudRedisInstanceDestroy,
225+
Steps: []resource.TestStep{
226+
{
227+
Config: testAccRedisInstanceParamTemplate(),
228+
Check: resource.ComposeAggregateTestCheckFunc(
229+
testAccTencentCloudRedisInstanceExists("tencentcloud_redis_instance.redis_instance_test"),
230+
resource.TestCheckResourceAttrSet("tencentcloud_redis_instance.redis_instance_test", "ip"),
231+
resource.TestCheckResourceAttrSet("tencentcloud_redis_instance.redis_instance_test", "create_time"),
232+
),
233+
},
234+
{
235+
Config: testAccRedisInstanceParamTemplateUpdate(),
236+
Check: resource.ComposeAggregateTestCheckFunc(
237+
testAccTencentCloudRedisInstanceExists("tencentcloud_redis_instance.redis_instance_test"),
238+
resource.TestCheckResourceAttrSet("tencentcloud_redis_instance.redis_instance_test", "ip"),
239+
resource.TestCheckResourceAttrSet("tencentcloud_redis_instance.redis_instance_test", "create_time"),
240+
),
241+
},
242+
},
243+
})
244+
}
245+
220246
func TestAccTencentCloudRedisInstance_Maz(t *testing.T) {
221247
resource.Test(t, resource.TestCase{
222248
PreCheck: func() { testAccPreCheck(t) },
@@ -314,34 +340,34 @@ func TestAccTencentCloudRedisInstance_Prepaid(t *testing.T) {
314340
func TestAccTencentCloudRedisGetRemoveNodesByIds(t *testing.T) {
315341
mockNodes1 := []*redis.RedisNodeInfo{
316342
{
317-
helper.IntInt64(0),
318-
helper.IntUint64(100001),
319-
helper.IntInt64(101),
343+
NodeType: helper.IntInt64(0),
344+
ZoneId: helper.IntUint64(100001),
345+
NodeId: helper.IntInt64(101),
320346
},
321347
{
322-
helper.IntInt64(1),
323-
helper.IntUint64(100001),
324-
helper.IntInt64(102),
348+
NodeType: helper.IntInt64(1),
349+
ZoneId: helper.IntUint64(100001),
350+
NodeId: helper.IntInt64(102),
325351
},
326352
{
327-
helper.IntInt64(1),
328-
helper.IntUint64(100001),
329-
helper.IntInt64(103),
353+
NodeType: helper.IntInt64(1),
354+
ZoneId: helper.IntUint64(100001),
355+
NodeId: helper.IntInt64(103),
330356
},
331357
{
332-
helper.IntInt64(1),
333-
helper.IntUint64(100002),
334-
helper.IntInt64(104),
358+
NodeType: helper.IntInt64(1),
359+
ZoneId: helper.IntUint64(100002),
360+
NodeId: helper.IntInt64(104),
335361
},
336362
{
337-
helper.IntInt64(1),
338-
helper.IntUint64(100002),
339-
helper.IntInt64(105),
363+
NodeType: helper.IntInt64(1),
364+
ZoneId: helper.IntUint64(100002),
365+
NodeId: helper.IntInt64(105),
340366
},
341367
{
342-
helper.IntInt64(1),
343-
helper.IntUint64(100003),
344-
helper.IntInt64(106),
368+
NodeType: helper.IntInt64(1),
369+
ZoneId: helper.IntUint64(100003),
370+
NodeId: helper.IntInt64(106),
345371
},
346372
}
347373

@@ -376,12 +402,16 @@ func TestAccTencentCloudRedisGetRemoveNodesByIds(t *testing.T) {
376402

377403
result1 := tencentCloudRedisGetRemoveNodesByIds(mockRemoves1[:], mockNodes1)
378404

379-
mockRemoves1Len := len(mockRemoves1)
380-
assert.Equal(t, 2, mockRemoves1Len)
405+
result1Len := len(result1)
406+
if result1Len != 2 {
407+
t.Errorf("result1 length expect %d, got %d", 2, result1Len)
408+
return
409+
}
381410
assert.Equal(t, int64(102), *result1[0].NodeId)
382411
assert.Equal(t, int64(104), *result1[1].NodeId)
383412

384413
result2 := tencentCloudRedisGetRemoveNodesByIds(mockRemoves2[:], mockNodes1)
414+
385415
assert.Equal(t, int64(102), *result2[0].NodeId)
386416
assert.Equal(t, int64(104), *result2[1].NodeId)
387417
assert.Equal(t, int64(106), *result2[2].NodeId)
@@ -432,6 +462,17 @@ func testAccTencentCloudRedisInstanceDestroy(s *terraform.State) error {
432462
return nil
433463
}
434464

465+
// FIXME use datasource instead
466+
const testAccRedisDefaultTemplate = `
467+
variable "redis_param_template" {
468+
default = "crs-cfg-1q38ngo0"
469+
}
470+
471+
variable "redis_default_param_template" {
472+
default = "default-param-template-6"
473+
}
474+
`
475+
435476
func testAccRedisInstanceBasic() string {
436477
return `
437478
resource "tencentcloud_redis_instance" "redis_instance_test" {
@@ -625,3 +666,34 @@ resource "tencentcloud_redis_instance" "redis_prepaid_instance_test" {
625666
force_delete = true
626667
}`
627668
}
669+
670+
func testAccRedisInstanceParamTemplate() string {
671+
return testAccRedisDefaultTemplate + `
672+
resource "tencentcloud_redis_instance" "redis_instance_test" {
673+
availability_zone = "ap-guangzhou-3"
674+
type_id = 6
675+
password = "test12345789"
676+
mem_size = 8192
677+
name = "terraform_test"
678+
port = 6379
679+
redis_shard_num = 1
680+
redis_replicas_num = 1
681+
params_template_id = var.redis_param_template
682+
}`
683+
}
684+
685+
func testAccRedisInstanceParamTemplateUpdate() string {
686+
return testAccRedisDefaultTemplate + `
687+
resource "tencentcloud_redis_instance" "redis_instance_test" {
688+
availability_zone = "ap-guangzhou-3"
689+
type_id = 6
690+
password = "test12345789"
691+
mem_size = 8192
692+
name = "terraform_test"
693+
port = 6379
694+
redis_shard_num = 1
695+
redis_replicas_num = 1
696+
params_template_id = var.redis_default_param_template
697+
}
698+
`
699+
}

tencentcloud/service_tencentcloud_redis.go

Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,7 @@ func (me *RedisService) CreateInstances(ctx context.Context,
252252
noAuth bool,
253253
autoRenewFlag int,
254254
replicasReadonly bool,
255+
paramsTemplateId string,
255256
) (instanceIds []*string, errRet error) {
256257

257258
logId := getLogId(ctx)
@@ -333,6 +334,9 @@ func (me *RedisService) CreateInstances(ctx context.Context,
333334
if replicasReadonly {
334335
request.ReplicasReadonly = &replicasReadonly
335336
}
337+
if paramsTemplateId != "" {
338+
request.TemplateId = &paramsTemplateId
339+
}
336340
ratelimit.Check(request.GetAction())
337341
response, err := me.client.UseRedisClient().CreateInstances(request)
338342
if err != nil {
@@ -930,3 +934,127 @@ func (me *RedisService) DescribeAutoBackupConfig(ctx context.Context, redisId st
930934
}
931935
return
932936
}
937+
938+
func (me *RedisService) DescribeParamTemplates(ctx context.Context, request *redis.DescribeParamTemplatesRequest) (params []*redis.ParamTemplateInfo, errRet error) {
939+
logId := getLogId(ctx)
940+
defer func() {
941+
if errRet != nil {
942+
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n",
943+
logId, request.GetAction(), request.ToJsonString(), errRet.Error())
944+
}
945+
}()
946+
947+
ratelimit.Check(request.GetAction())
948+
response, err := me.client.UseRedisClient().DescribeParamTemplates(request)
949+
950+
if err != nil {
951+
errRet = err
952+
return
953+
}
954+
955+
params = response.Response.Items
956+
957+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n",
958+
logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
959+
960+
return
961+
}
962+
963+
func (me *RedisService) DescribeParamTemplateById(ctx context.Context, id string) (params *redis.ParamTemplateInfo, errRet error) {
964+
request := redis.NewDescribeParamTemplatesRequest()
965+
966+
request.TemplateIds = []*string{&id}
967+
968+
result, err := me.DescribeParamTemplates(ctx, request)
969+
970+
if err != nil {
971+
errRet = err
972+
return
973+
}
974+
975+
if len(result) == 0 {
976+
return
977+
}
978+
979+
params = result[0]
980+
981+
return
982+
}
983+
984+
func (me *RedisService) ApplyParamsTemplate(ctx context.Context, request *redis.ApplyParamsTemplateRequest) (taskIds []*int64, errRet error) {
985+
logId := getLogId(ctx)
986+
defer func() {
987+
if errRet != nil {
988+
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n",
989+
logId, request.GetAction(), request.ToJsonString(), errRet.Error())
990+
}
991+
}()
992+
993+
ratelimit.Check(request.GetAction())
994+
response, err := me.client.UseRedisClient().ApplyParamsTemplate(request)
995+
996+
if err != nil {
997+
errRet = err
998+
return
999+
}
1000+
1001+
taskIds = response.Response.TaskIds
1002+
1003+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n",
1004+
logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
1005+
1006+
return
1007+
}
1008+
1009+
func (me *RedisService) CreateParamTemplate(ctx context.Context, request *redis.CreateParamTemplateRequest) (id string, errRet error) {
1010+
logId := getLogId(ctx)
1011+
defer func() {
1012+
if errRet != nil {
1013+
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n",
1014+
logId, request.GetAction(), request.ToJsonString(), errRet.Error())
1015+
}
1016+
}()
1017+
1018+
ratelimit.Check(request.GetAction())
1019+
response, err := me.client.UseRedisClient().CreateParamTemplate(request)
1020+
1021+
if err != nil {
1022+
errRet = err
1023+
return
1024+
}
1025+
1026+
if response.Response == nil {
1027+
errRet = fmt.Errorf("[%s] returns nil response", request.GetAction())
1028+
return
1029+
}
1030+
1031+
id = *response.Response.TemplateId
1032+
1033+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n",
1034+
logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
1035+
1036+
return
1037+
}
1038+
1039+
func (me *RedisService) DeleteParamTemplate(ctx context.Context, request *redis.DeleteParamTemplateRequest) (errRet error) {
1040+
logId := getLogId(ctx)
1041+
defer func() {
1042+
if errRet != nil {
1043+
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n",
1044+
logId, request.GetAction(), request.ToJsonString(), errRet.Error())
1045+
}
1046+
}()
1047+
1048+
ratelimit.Check(request.GetAction())
1049+
response, err := me.client.UseRedisClient().DeleteParamTemplate(request)
1050+
1051+
if err != nil {
1052+
errRet = err
1053+
return
1054+
}
1055+
1056+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n",
1057+
logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
1058+
1059+
return
1060+
}

vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http/request.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)