From 58f412797c8757b791e0703ebd425b5fe30e2e40 Mon Sep 17 00:00:00 2001 From: SevenEarth <391613297@qq.com> Date: Thu, 23 Jan 2025 14:43:55 +0800 Subject: [PATCH 1/2] add --- tencentcloud/provider.md | 1 + .../services/crs/resource_tc_redis_param.go | 43 +++++++++++------ .../services/crs/resource_tc_redis_param.md | 46 +++++++++---------- website/docs/r/redis_param.html.markdown | 4 +- website/tencentcloud.erb | 3 ++ 5 files changed, 58 insertions(+), 39 deletions(-) diff --git a/tencentcloud/provider.md b/tencentcloud/provider.md index 45ad5cfe45..1cc6f017ae 100644 --- a/tencentcloud/provider.md +++ b/tencentcloud/provider.md @@ -946,6 +946,7 @@ TencentDB for Redis(crs) tencentcloud_redis_security_group_attachment tencentcloud_redis_connection_config tencentcloud_redis_log_delivery + tencentcloud_redis_param Serverless Cloud Function(SCF) Data Source diff --git a/tencentcloud/services/crs/resource_tc_redis_param.go b/tencentcloud/services/crs/resource_tc_redis_param.go index 1288d422bb..a6f203c1d2 100644 --- a/tencentcloud/services/crs/resource_tc_redis_param.go +++ b/tencentcloud/services/crs/resource_tc_redis_param.go @@ -45,12 +45,25 @@ func resourceTencentCloudRedisParamCreate(d *schema.ResourceData, meta interface defer tccommon.InconsistentCheck(d, meta)() var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} instanceId string ) + if v, ok := d.GetOk("instance_id"); ok { instanceId = v.(string) } + resp, err := service.DescribeRedisInstanceById(ctx, instanceId) + if err != nil { + return err + } + + if resp == nil || resp.InstanceId != nil || *resp.InstanceId != instanceId { + return fmt.Errorf("Illegal `instance_id`") + } + d.SetId(instanceId) return resourceTencentCloudRedisParamUpdate(d, meta) @@ -60,12 +73,12 @@ func resourceTencentCloudRedisParamRead(d *schema.ResourceData, meta interface{} defer tccommon.LogElapsed("resource.tencentcloud_redis_param.read")() defer tccommon.InconsistentCheck(d, meta)() - logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - - service := RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - - instanceId := d.Id() + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + instanceId = d.Id() + ) param, err := service.DescribeRedisParamById(ctx, instanceId) if err != nil { @@ -88,6 +101,7 @@ func resourceTencentCloudRedisParamRead(d *schema.ResourceData, meta interface{} } else { instanceParamsMap = param } + _ = d.Set("instance_params", instanceParamsMap) return nil @@ -97,21 +111,22 @@ func resourceTencentCloudRedisParamUpdate(d *schema.ResourceData, meta interface defer tccommon.LogElapsed("resource.tencentcloud_redis_param.update")() 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 = RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + instanceId = d.Id() + ) request := redis.NewModifyInstanceParamsRequest() response := redis.NewModifyInstanceParamsResponse() - - instanceId := d.Id() request.InstanceId = &instanceId - if v, ok := d.GetOk("instance_params"); ok { - service := RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} param, err := service.DescribeRedisParamById(ctx, instanceId) if err != nil && len(param) == 0 { return fmt.Errorf("[ERROR] resource `RedisParam` [%s] not found, please check if it has been deleted.\n", d.Id()) } + for k, v := range v.(map[string]interface{}) { if value, ok := param[k]; ok { if value != v { @@ -137,16 +152,16 @@ func resourceTencentCloudRedisParamUpdate(d *schema.ResourceData, meta interface } 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 update redis param failed, reason:%+v", logId, err) return err } - service := RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - taskId := *response.Response.TaskId err = resource.Retry(6*tccommon.ReadRetryTimeout, func() *resource.RetryError { ok, err := service.DescribeTaskInfo(ctx, instanceId, taskId) diff --git a/tencentcloud/services/crs/resource_tc_redis_param.md b/tencentcloud/services/crs/resource_tc_redis_param.md index 0259266cac..257c909d85 100644 --- a/tencentcloud/services/crs/resource_tc_redis_param.md +++ b/tencentcloud/services/crs/resource_tc_redis_param.md @@ -3,28 +3,28 @@ Provides a resource to create a redis param Example Usage ```hcl -resource "tencentcloud_redis_param" "param" { - instance_id = "crs-c1nl9rpv" - instance_params = { - "cluster-node-timeout" = "15000" - "disable-command-list" = "\"\"" - "hash-max-ziplist-entries" = "512" - "hash-max-ziplist-value" = "64" - "hz" = "10" - "lazyfree-lazy-eviction" = "yes" - "lazyfree-lazy-expire" = "yes" - "lazyfree-lazy-server-del" = "yes" - "maxmemory-policy" = "noeviction" - "notify-keyspace-events" = "\"\"" - "proxy-slowlog-log-slower-than" = "500" - "replica-lazy-flush" = "yes" - "sentineauth" = "no" - "set-max-intset-entries" = "512" - "slowlog-log-slower-than" = "10" - "timeout" = "31536000" - "zset-max-ziplist-entries" = "128" - "zset-max-ziplist-value" = "64" - } +resource "tencentcloud_redis_param" "example" { + instance_id = "crs-c1nl9rpv" + instance_params = { + "cluster-node-timeout" = "15000" + "disable-command-list" = "\"\"" + "hash-max-ziplist-entries" = "512" + "hash-max-ziplist-value" = "64" + "hz" = "10" + "lazyfree-lazy-eviction" = "yes" + "lazyfree-lazy-expire" = "yes" + "lazyfree-lazy-server-del" = "yes" + "maxmemory-policy" = "noeviction" + "notify-keyspace-events" = "\"\"" + "proxy-slowlog-log-slower-than" = "500" + "replica-lazy-flush" = "yes" + "sentineauth" = "no" + "set-max-intset-entries" = "512" + "slowlog-log-slower-than" = "10" + "timeout" = "31536000" + "zset-max-ziplist-entries" = "128" + "zset-max-ziplist-value" = "64" + } } ``` @@ -33,5 +33,5 @@ Import redis param can be imported using the instanceId, e.g. ``` -terraform import tencentcloud_redis_param.param crs-c1nl9rpv +terraform import tencentcloud_redis_param.example crs-c1nl9rpv ``` diff --git a/website/docs/r/redis_param.html.markdown b/website/docs/r/redis_param.html.markdown index d6f9854dfc..7d81d39382 100644 --- a/website/docs/r/redis_param.html.markdown +++ b/website/docs/r/redis_param.html.markdown @@ -14,7 +14,7 @@ Provides a resource to create a redis param ## Example Usage ```hcl -resource "tencentcloud_redis_param" "param" { +resource "tencentcloud_redis_param" "example" { instance_id = "crs-c1nl9rpv" instance_params = { "cluster-node-timeout" = "15000" @@ -59,6 +59,6 @@ In addition to all arguments above, the following attributes are exported: redis param can be imported using the instanceId, e.g. ``` -terraform import tencentcloud_redis_param.param crs-c1nl9rpv +terraform import tencentcloud_redis_param.example crs-c1nl9rpv ``` diff --git a/website/tencentcloud.erb b/website/tencentcloud.erb index 15e94d84a2..9c800aea1e 100644 --- a/website/tencentcloud.erb +++ b/website/tencentcloud.erb @@ -6112,6 +6112,9 @@
  • tencentcloud_redis_maintenance_window
  • +
  • + tencentcloud_redis_param +
  • tencentcloud_redis_param_template
  • From 15dd1755532adf091061489edffaae00b605e9b2 Mon Sep 17 00:00:00 2001 From: SevenEarth <391613297@qq.com> Date: Thu, 23 Jan 2025 14:46:03 +0800 Subject: [PATCH 2/2] add --- .changelog/3104.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .changelog/3104.txt diff --git a/.changelog/3104.txt b/.changelog/3104.txt new file mode 100644 index 0000000000..eaf1666ba3 --- /dev/null +++ b/.changelog/3104.txt @@ -0,0 +1,3 @@ +```release-note:enhancement +resource/tencentcloud_redis_param: fix the problem caused by illegal parameter `instance_id` +```