From df797159feb7b02e5a74771d89282d5c460b0fda Mon Sep 17 00:00:00 2001 From: SevenEarth <391613297@qq.com> Date: Mon, 21 Apr 2025 17:42:42 +0800 Subject: [PATCH 1/2] add --- .../dcdb/resource_tc_dcdb_hourdb_instance.go | 230 ++++++++++++------ .../dcdb/resource_tc_dcdb_hourdb_instance.md | 36 +-- .../dcdb/service_tencentcloud_dcdb.go | 67 +++-- .../docs/r/dcdb_hourdb_instance.html.markdown | 28 +-- 4 files changed, 239 insertions(+), 122 deletions(-) diff --git a/tencentcloud/services/dcdb/resource_tc_dcdb_hourdb_instance.go b/tencentcloud/services/dcdb/resource_tc_dcdb_hourdb_instance.go index 37c8a0e462..9323c4868e 100644 --- a/tencentcloud/services/dcdb/resource_tc_dcdb_hourdb_instance.go +++ b/tencentcloud/services/dcdb/resource_tc_dcdb_hourdb_instance.go @@ -17,8 +17,8 @@ import ( func ResourceTencentCloudDcdbHourdbInstance() *schema.Resource { return &schema.Resource{ - Read: resourceTencentCloudDcdbHourdbInstanceRead, Create: resourceTencentCloudDcdbHourdbInstanceCreate, + Read: resourceTencentCloudDcdbHourdbInstanceRead, Update: resourceTencentCloudDcdbHourdbInstanceUpdate, Delete: resourceTencentCloudDcdbHourdbInstanceDelete, Importer: &schema.ResourceImporter{ @@ -166,6 +166,9 @@ func resourceTencentCloudDcdbHourdbInstanceCreate(d *schema.ResourceData, meta i defer tccommon.InconsistentCheck(d, meta)() var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = DcdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} request = dcdb.NewCreateHourDCDBInstanceRequest() response *dcdb.CreateHourDCDBInstanceResponse instanceId string @@ -173,9 +176,6 @@ func resourceTencentCloudDcdbHourdbInstanceCreate(d *schema.ResourceData, meta i vpcId string subnetId string ipv6Flag int - logId = tccommon.GetLogId(tccommon.ContextNil) - ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service = DcdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} ) if v, ok := d.GetOk("zones"); ok { @@ -186,19 +186,19 @@ func resourceTencentCloudDcdbHourdbInstanceCreate(d *schema.ResourceData, meta i } } - if v, ok := d.GetOk("shard_memory"); ok { + if v, ok := d.GetOkExists("shard_memory"); ok { request.ShardMemory = helper.IntInt64(v.(int)) } - if v, ok := d.GetOk("shard_storage"); ok { + if v, ok := d.GetOkExists("shard_storage"); ok { request.ShardStorage = helper.IntInt64(v.(int)) } - if v, ok := d.GetOk("shard_node_count"); ok { + if v, ok := d.GetOkExists("shard_node_count"); ok { request.ShardNodeCount = helper.IntInt64(v.(int)) } - if v, ok := d.GetOk("shard_count"); ok { + if v, ok := d.GetOkExists("shard_count"); ok { request.ShardCount = helper.IntInt64(v.(int)) } @@ -220,7 +220,7 @@ func resourceTencentCloudDcdbHourdbInstanceCreate(d *schema.ResourceData, meta i request.SecurityGroupId = helper.String(v.(string)) } - if v, ok := d.GetOk("project_id"); ok { + if v, ok := d.GetOkExists("project_id"); ok { request.ProjectId = helper.IntInt64(v.(int)) } @@ -228,7 +228,7 @@ func resourceTencentCloudDcdbHourdbInstanceCreate(d *schema.ResourceData, meta i request.InstanceName = helper.String(v.(string)) } - if v, _ := d.GetOk("ipv6_flag"); v != nil { + if v, _ := d.GetOkExists("ipv6_flag"); v != nil { request.Ipv6Flag = helper.IntInt64(v.(int)) ipv6Flag = v.(int) } @@ -240,6 +240,7 @@ func resourceTencentCloudDcdbHourdbInstanceCreate(d *schema.ResourceData, meta i if v, ok := dMap["tag_key"]; ok { resourceTag.TagKey = helper.String(v.(string)) } + if v, ok := dMap["tag_value"]; ok { resourceTag.TagValue = helper.String(v.(string)) } @@ -265,6 +266,11 @@ func resourceTencentCloudDcdbHourdbInstanceCreate(d *schema.ResourceData, meta i log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } + + if result == nil || result.Response == nil { + return resource.NonRetryableError(fmt.Errorf("Create dcdb hourdbInstance failed, Response is nil.")) + } + response = result return nil }) @@ -274,6 +280,10 @@ func resourceTencentCloudDcdbHourdbInstanceCreate(d *schema.ResourceData, meta i return err } + if len(response.Response.InstanceIds) != 1 { + return fmt.Errorf("InstanceIds is error.") + } + instanceId = *response.Response.InstanceIds[0] d.SetId(instanceId) @@ -301,6 +311,7 @@ func resourceTencentCloudDcdbHourdbInstanceCreate(d *schema.ResourceData, meta i if err != nil { return err } + if !initRet { return fmt.Errorf("db instance init failed") } @@ -339,6 +350,7 @@ func resourceTencentCloudDcdbHourdbInstanceCreate(d *schema.ResourceData, meta i if v, ok := d.GetOk("vip"); ok { vip = v.(string) } + if v, ok := d.GetOk("vipv6"); ok { vipv6 = v.(string) } @@ -361,15 +373,14 @@ func resourceTencentCloudDcdbHourdbInstanceRead(d *schema.ResourceData, meta int defer tccommon.LogElapsed("resource.tencentcloud_dcdb_hourdb_instance.read")() defer tccommon.InconsistentCheck(d, meta)() - logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - - service := DcdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - - instanceId := d.Id() + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = DcdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + instanceId = d.Id() + ) hourdbInstances, err := service.DescribeDcdbHourdbInstance(ctx, instanceId) - if err != nil { return err } @@ -385,10 +396,8 @@ func resourceTencentCloudDcdbHourdbInstanceRead(d *schema.ResourceData, meta int } hourdbInstance := hourdbInstances.Instances[0] - if hourdbInstance.ShardDetail[0] != nil { // Memory and Storage is params for one shard shard := hourdbInstance.ShardDetail[0] - if shard.Memory != nil { _ = d.Set("shard_memory", shard.Memory) } @@ -448,6 +457,7 @@ func resourceTencentCloudDcdbHourdbInstanceRead(d *schema.ResourceData, meta int if resourceTags.TagKey != nil { resourceTagsMap["tag_key"] = resourceTags.TagKey } + if resourceTags.TagValue != nil { resourceTagsMap["tag_value"] = resourceTags.TagValue } @@ -462,6 +472,7 @@ func resourceTencentCloudDcdbHourdbInstanceRead(d *schema.ResourceData, meta int if sg != nil && len(sg.Groups) > 0 { sgId = *sg.Groups[0].SecurityGroupId } + _ = d.Set("security_group_id", sgId) } else { return err @@ -493,6 +504,7 @@ func resourceTencentCloudDcdbHourdbInstanceRead(d *schema.ResourceData, meta int if detail.SlaveZones != nil { zones = append(zones, detail.SlaveZones...) } + _ = d.Set("zones", zones) } } @@ -507,67 +519,40 @@ func resourceTencentCloudDcdbHourdbInstanceUpdate(d *schema.ResourceData, meta i defer tccommon.LogElapsed("resource.tencentcloud_dcdb_hourdb_instance.update")() defer tccommon.InconsistentCheck(d, meta)() - logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - var ( - request = dcdb.NewModifyDBInstanceNameRequest() - service = DcdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = DcdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + instanceId = d.Id() ) - instanceId := d.Id() - - request.InstanceId = &instanceId - - if d.HasChange("zones") { - return fmt.Errorf("`zones` do not support change now.") - } - - if d.HasChange("shard_memory") { - return fmt.Errorf("`shard_memory` do not support change now.") - } - - if d.HasChange("shard_storage") { - return fmt.Errorf("`shard_storage` do not support change now.") - } - - if d.HasChange("shard_node_count") { - return fmt.Errorf("`shard_node_count` do not support change now.") - } - - if d.HasChange("shard_count") { - return fmt.Errorf("`shard_count` do not support change now.") - } - - if d.HasChange("db_version_id") { - return fmt.Errorf("`db_version_id` do not support change now.") + immutableArgs := []string{"zones", "shard_node_count", "shard_count", "db_version_id", "dcn_region", "dcn_instance_id", "resource_tags"} + for _, v := range immutableArgs { + if d.HasChange(v) { + return fmt.Errorf("argument `%s` cannot be changed", v) + } } - // wait for ModifyDBInstanceSecurityGroups - // if d.HasChange("security_group_id") { - // return fmt.Errorf("`security_group_id` do not support change now.") - // } - if v, ok := d.GetOkExists("extranet_access"); ok && v != nil { flag := v.(bool) var ipv6Flag int if v, _ := d.GetOk("ipv6_flag"); v != nil { ipv6Flag = v.(int) } + err := service.SetDcdbExtranetAccess(ctx, instanceId, ipv6Flag, flag) if err != nil { return err } + time.Sleep(2 * time.Second) } if d.HasChange("project_id") { if projectId, ok := d.GetOk("project_id"); ok { request := dcdb.NewModifyDBInstancesProjectRequest() - request.InstanceIds = []*string{&instanceId} request.ProjectId = helper.IntInt64(projectId.(int)) - err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseDcdbClient().ModifyDBInstancesProject(request) if e != nil { @@ -575,13 +560,16 @@ func resourceTencentCloudDcdbHourdbInstanceUpdate(d *schema.ResourceData, meta i } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } + return nil }) + if err != nil { log.Printf("[CRITAL]%s operate dcdb modifyInstanceProjectOperation failed, reason:%+v", logId, err) return err } } + time.Sleep(2 * time.Second) } @@ -592,15 +580,19 @@ func resourceTencentCloudDcdbHourdbInstanceUpdate(d *schema.ResourceData, meta i vpcId string subnetId string ) + if v, ok := d.GetOk("vip"); ok { vip = v.(string) } + if v, ok := d.GetOk("vipv6"); ok { vipv6 = v.(string) } + if v, ok := d.GetOk("vpc_id"); ok { vpcId = v.(string) } + if v, ok := d.GetOk("subnet_id"); ok { subnetId = v.(string) } @@ -615,21 +607,13 @@ func resourceTencentCloudDcdbHourdbInstanceUpdate(d *schema.ResourceData, meta i } } - if d.HasChange("dcn_region") { - return fmt.Errorf("`dcn_region` do not support change now.") - } - if d.HasChange("dcn_instance_id") { - return fmt.Errorf("`dcn_instance_id` do not support change now.") - } - - if d.HasChange("resource_tags") { - return fmt.Errorf("`resource_tags` do not support change now.") - } - if d.HasChange("instance_name") { + request := dcdb.NewModifyDBInstanceNameRequest() if v, ok := d.GetOk("instance_name"); ok { request.InstanceName = helper.String(v.(string)) } + + request.InstanceId = &instanceId err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseDcdbClient().ModifyDBInstanceName(request) if e != nil { @@ -638,11 +622,100 @@ func resourceTencentCloudDcdbHourdbInstanceUpdate(d *schema.ResourceData, meta i log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } + + return nil + }) + + if err != nil { + log.Printf("[CRITAL]%s modify dcdb hourdbInstance name failed, reason:%+v", logId, err) + return err + } + } + + if d.HasChange("shard_memory") || d.HasChange("shard_storage") { + // get ShardInstanceIds + hourdbInstances, err := service.DescribeDcdbHourdbInstance(ctx, instanceId) + if err != nil { + return err + } + + if hourdbInstances == nil { + d.SetId("") + return fmt.Errorf("resource `hourdbInstance` %s does not exist", instanceId) + } + + if *hourdbInstances.TotalCount > 1 || len(hourdbInstances.Instances) > 1 { + d.SetId("") + return fmt.Errorf("the count of resource `hourdbInstance` shoud not beyond one. count: %v\n", hourdbInstances.TotalCount) + } + + hourdbInstance := hourdbInstances.Instances[0] + shardInstanceIds := make([]string, 0, len(hourdbInstance.ShardDetail)) + if len(hourdbInstance.ShardDetail) > 0 { // Memory and Storage is params for one shard + for _, item := range hourdbInstance.ShardDetail { + shardInstanceIds = append(shardInstanceIds, *item.ShardInstanceId) + } + } + + var ( + shardMemory int + shardStorage int + ) + + if v, ok := d.GetOkExists("shard_memory"); ok { + shardMemory = v.(int) + } + + if v, ok := d.GetOkExists("shard_storage"); ok { + shardStorage = v.(int) + } + + request := dcdb.NewUpgradeHourDCDBInstanceRequest() + request.InstanceId = &instanceId + request.UpgradeType = helper.String("EXPAND") + request.ExpandShardConfig = &dcdb.ExpandShardConfig{ + ShardInstanceIds: helper.Strings(shardInstanceIds), + ShardMemory: helper.IntInt64(shardMemory), + ShardStorage: helper.IntInt64(shardStorage), + } + + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseDcdbClient().UpgradeHourDCDBInstance(request) + if e != nil { + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) + } + return nil }) if err != nil { - log.Printf("[CRITAL]%s create dcdb hourdbInstance failed, reason:%+v", logId, err) + log.Printf("[CRITAL]%s modify dcdb hourdbInstance config failed, reason:%+v", logId, err) + return err + } + + // wait + err = resource.Retry(tccommon.ReadRetryTimeout*10, func() *resource.RetryError { + dbInstances, errResp := service.DescribeDcdbDbInstance(ctx, instanceId) + if errResp != nil { + return tccommon.RetryError(errResp, tccommon.InternalError) + } + + if dbInstances.Instances[0] == nil { + return resource.NonRetryableError(fmt.Errorf("DescribeDcdbDbInstance return result(dcdb instance) is nil!")) + } + + dbInstance := dbInstances.Instances[0] + if *dbInstance.Status == 2 { + return nil + } + + return resource.RetryableError(fmt.Errorf("dcdb instance status is %v, retry...", *dbInstance.Status)) + }) + + if err != nil { return err } } @@ -654,14 +727,23 @@ func resourceTencentCloudDcdbHourdbInstanceDelete(d *schema.ResourceData, meta i defer tccommon.LogElapsed("resource.tencentcloud_dcdb_hourdb_instance.delete")() 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 = DcdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + instanceId = d.Id() + ) - service := DcdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + e := service.DeleteDcdbHourdbInstanceById(ctx, instanceId) + if e != nil { + return tccommon.RetryError(e) + } - instanceId := d.Id() + return nil + }) - if err := service.DeleteDcdbHourdbInstanceById(ctx, instanceId); err != nil { + if err != nil { return err } diff --git a/tencentcloud/services/dcdb/resource_tc_dcdb_hourdb_instance.md b/tencentcloud/services/dcdb/resource_tc_dcdb_hourdb_instance.md index 2b7915907e..af89d92bd4 100644 --- a/tencentcloud/services/dcdb/resource_tc_dcdb_hourdb_instance.md +++ b/tencentcloud/services/dcdb/resource_tc_dcdb_hourdb_instance.md @@ -1,29 +1,29 @@ -Provides a resource to create a dcdb hourdb_instance +Provides a resource to create a DCDB hourdb instance Example Usage ```hcl -resource "tencentcloud_dcdb_hourdb_instance" "hourdb_instance" { - instance_name = "test_dcdc_dc_instance" - zones = ["ap-guangzhou-5", "ap-guangzhou-6"] - shard_memory = "2" - shard_storage = "10" - shard_node_count = "2" - shard_count = "2" - vpc_id = local.vpc_id - subnet_id = local.subnet_id - security_group_id = local.sg_id - db_version_id = "8.0" +resource "tencentcloud_dcdb_hourdb_instance" "example" { + instance_name = "tf-example" + zones = ["ap-guangzhou-6", "ap-guangzhou-7"] + shard_memory = "4" + shard_storage = "50" + shard_node_count = "2" + shard_count = "2" + vpc_id = "vpc-i5yyodl9" + subnet_id = "subnet-hhi88a58" + security_group_id = "sg-4z20n68d" + db_version_id = "8.0" resource_tags { - tag_key = "aaa" - tag_value = "bbb" + tag_key = "tagKey" + tag_value = "tagValue" } } - ``` + Import -dcdb hourdb_instance can be imported using the id, e.g. +DCDB hourdb instance can be imported using the id, e.g. +``` +$ terraform import tencentcloud_dcdb_hourdb_instance.example tdsqlshard-nr6j5sed ``` -$ terraform import tencentcloud_dcdb_hourdb_instance.hourdb_instance hourdbInstance_id -``` \ No newline at end of file diff --git a/tencentcloud/services/dcdb/service_tencentcloud_dcdb.go b/tencentcloud/services/dcdb/service_tencentcloud_dcdb.go index 8cc73421e1..8eb41e62f1 100644 --- a/tencentcloud/services/dcdb/service_tencentcloud_dcdb.go +++ b/tencentcloud/services/dcdb/service_tencentcloud_dcdb.go @@ -207,8 +207,9 @@ func (me *DcdbService) DeleteDcdbHourdbInstanceById(ctx context.Context, instanc // dc_sg func (me *DcdbService) DescribeDcdbSecurityGroup(ctx context.Context, instanceId string) (securityGroup *dcdb.DescribeDBSecurityGroupsResponseParams, errRet error) { var ( - logId = tccommon.GetLogId(ctx) - request = dcdb.NewDescribeDBSecurityGroupsRequest() + logId = tccommon.GetLogId(ctx) + request = dcdb.NewDescribeDBSecurityGroupsRequest() + response = dcdb.NewDescribeDBSecurityGroupsResponse() ) defer func() { @@ -220,16 +221,24 @@ func (me *DcdbService) DescribeDcdbSecurityGroup(ctx context.Context, instanceId request.InstanceId = &instanceId request.Product = helper.String("dcdb") // api only use this fixed value + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := me.client.UseDcdbClient().DescribeDBSecurityGroups(request) + if e != nil { + return tccommon.RetryError(e) + } + + 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 + }) - response, err := me.client.UseDcdbClient().DescribeDBSecurityGroups(request) if err != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), err.Error()) errRet = err return } - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", - logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + securityGroup = response.Response return @@ -267,8 +276,9 @@ func (me *DcdbService) DeleteDcdbSecurityGroupAttachmentById(ctx context.Context // tencentcloud_dcdb_instances func (me *DcdbService) DescribeDcdbInstancesByFilter(ctx context.Context, params map[string]interface{}) (instances []*dcdb.DCDBInstanceInfo, errRet error) { var ( - logId = tccommon.GetLogId(ctx) - request = dcdb.NewDescribeDCDBInstancesRequest() + logId = tccommon.GetLogId(ctx) + request = dcdb.NewDescribeDCDBInstancesRequest() + response = dcdb.NewDescribeDCDBInstancesResponse() ) defer func() { @@ -328,17 +338,24 @@ func (me *DcdbService) DescribeDcdbInstancesByFilter(ctx context.Context, params for { request.Offset = &offset request.Limit = &pageSize + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + result, e := me.client.UseDcdbClient().DescribeDCDBInstances(request) + if e != nil { + return tccommon.RetryError(e) + } + + 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 + }) - ratelimit.Check(request.GetAction()) - response, err := me.client.UseDcdbClient().DescribeDCDBInstances(request) if err != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), err.Error()) errRet = err return } - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", - logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) if response == nil || len(response.Response.Instances) < 1 { break @@ -604,6 +621,7 @@ func (me *DcdbService) DescribeDcnDetailById(ctx context.Context, instanceId str logId := tccommon.GetLogId(ctx) request := dcdb.NewDescribeDcnDetailRequest() + response := dcdb.NewDescribeDcnDetailResponse() request.InstanceId = &instanceId defer func() { @@ -613,13 +631,21 @@ func (me *DcdbService) DescribeDcnDetailById(ctx context.Context, instanceId str }() ratelimit.Check(request.GetAction()) + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := me.client.UseDcdbClient().DescribeDcnDetail(request) + if e != nil { + return tccommon.RetryError(e) + } + + 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 + }) - response, err := me.client.UseDcdbClient().DescribeDcnDetail(request) if err != nil { errRet = err return } - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) if len(response.Response.DcnDetails) < 1 { return @@ -926,6 +952,7 @@ func (me *DcdbService) DescribeDcdbDbInstanceDetailById(ctx context.Context, ins logId := tccommon.GetLogId(ctx) request := dcdb.NewDescribeDCDBInstanceDetailRequest() + response := dcdb.NewDescribeDCDBInstanceDetailResponse() request.InstanceId = &instanceId defer func() { @@ -934,14 +961,22 @@ func (me *DcdbService) DescribeDcdbDbInstanceDetailById(ctx context.Context, ins } }() - ratelimit.Check(request.GetAction()) + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + result, e := me.client.UseDcdbClient().DescribeDCDBInstanceDetail(request) + if e != nil { + return tccommon.RetryError(e) + } + + 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 + }) - response, err := me.client.UseDcdbClient().DescribeDCDBInstanceDetail(request) if err != nil { errRet = err return } - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) dedicatedClusterDbInstance = response.Response return diff --git a/website/docs/r/dcdb_hourdb_instance.html.markdown b/website/docs/r/dcdb_hourdb_instance.html.markdown index 0232f0748a..3ece305ca9 100644 --- a/website/docs/r/dcdb_hourdb_instance.html.markdown +++ b/website/docs/r/dcdb_hourdb_instance.html.markdown @@ -4,30 +4,30 @@ layout: "tencentcloud" page_title: "TencentCloud: tencentcloud_dcdb_hourdb_instance" sidebar_current: "docs-tencentcloud-resource-dcdb_hourdb_instance" description: |- - Provides a resource to create a dcdb hourdb_instance + Provides a resource to create a DCDB hourdb instance --- # tencentcloud_dcdb_hourdb_instance -Provides a resource to create a dcdb hourdb_instance +Provides a resource to create a DCDB hourdb instance ## Example Usage ```hcl -resource "tencentcloud_dcdb_hourdb_instance" "hourdb_instance" { - instance_name = "test_dcdc_dc_instance" - zones = ["ap-guangzhou-5", "ap-guangzhou-6"] - shard_memory = "2" - shard_storage = "10" +resource "tencentcloud_dcdb_hourdb_instance" "example" { + instance_name = "tf-example" + zones = ["ap-guangzhou-6", "ap-guangzhou-7"] + shard_memory = "4" + shard_storage = "50" shard_node_count = "2" shard_count = "2" - vpc_id = local.vpc_id - subnet_id = local.subnet_id - security_group_id = local.sg_id + vpc_id = "vpc-i5yyodl9" + subnet_id = "subnet-hhi88a58" + security_group_id = "sg-4z20n68d" db_version_id = "8.0" resource_tags { - tag_key = "aaa" - tag_value = "bbb" + tag_key = "tagKey" + tag_value = "tagValue" } } ``` @@ -70,8 +70,8 @@ In addition to all arguments above, the following attributes are exported: ## Import -dcdb hourdb_instance can be imported using the id, e.g. +DCDB hourdb instance can be imported using the id, e.g. ``` -$ terraform import tencentcloud_dcdb_hourdb_instance.hourdb_instance hourdbInstance_id +$ terraform import tencentcloud_dcdb_hourdb_instance.example tdsqlshard-nr6j5sed ``` From 7acc9a3cfc832bcb278e136e7ccfb294f25e639e Mon Sep 17 00:00:00 2001 From: SevenEarth <391613297@qq.com> Date: Mon, 21 Apr 2025 17:45:06 +0800 Subject: [PATCH 2/2] add --- .changelog/3320.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .changelog/3320.txt diff --git a/.changelog/3320.txt b/.changelog/3320.txt new file mode 100644 index 0000000000..31a6a1fb81 --- /dev/null +++ b/.changelog/3320.txt @@ -0,0 +1,3 @@ +```release-note:enhancement +resource/tencentcloud_dcdb_hourdb_instance: support modify `shard_memory`, `shard_storage` +``` \ No newline at end of file