From ecdb570202e2951f753416b5d1ea27b5598edae5 Mon Sep 17 00:00:00 2001 From: arunma Date: Thu, 16 May 2024 10:21:21 +0800 Subject: [PATCH 1/3] fix: improvement id empty situation --- tencentcloud/acctest/basic.go | 7 ++- .../resource_tc_cynosdb_readonly_instance.go | 49 +++++++++++++++++-- ...ource_tc_cynosdb_readonly_instance_test.go | 46 ++++++++++------- 3 files changed, 78 insertions(+), 24 deletions(-) diff --git a/tencentcloud/acctest/basic.go b/tencentcloud/acctest/basic.go index 71f199a868..6516a9329e 100644 --- a/tencentcloud/acctest/basic.go +++ b/tencentcloud/acctest/basic.go @@ -99,7 +99,7 @@ const ( DefaultGaapRealserverIp2 = "1.1.1.5" DefaultHttpsDomainCertificateId = "cert-crg2aynt" - DefaultSecurityGroup = "sg-ijato2x1" + DefaultSecurityGroup = "sg-05f7wnhn" DefaultProjectId = "0" @@ -406,12 +406,11 @@ locals { const DefaultSecurityGroupData = FixedTagVariable + ` data "tencentcloud_security_groups" "internal" { - name = "default" - tags = var.fixed_tags + name = "keep-reject-all" } data "tencentcloud_security_groups" "exclusive" { - name = "test_preset_sg" + name = "keep-reject-all" } locals { diff --git a/tencentcloud/services/cynosdb/resource_tc_cynosdb_readonly_instance.go b/tencentcloud/services/cynosdb/resource_tc_cynosdb_readonly_instance.go index a8f9b7d643..35e6e0730c 100644 --- a/tencentcloud/services/cynosdb/resource_tc_cynosdb_readonly_instance.go +++ b/tencentcloud/services/cynosdb/resource_tc_cynosdb_readonly_instance.go @@ -9,6 +9,7 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" cynosdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb/v20190107" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" @@ -110,11 +111,39 @@ func resourceTencentCloudCynosdbReadonlyInstanceCreate(d *schema.ResourceData, m if err != nil { return err } - if response != nil && response.Response != nil && len(response.Response.ResourceIds) != 1 { + + if response != nil && response.Response != nil && len(response.Response.DealNames) < 1 { + return fmt.Errorf("cynosdb cluster id count isn't 1") + } + + dealName := response.Response.DealNames[0] + dealReq := cynosdb.NewDescribeResourcesByDealNameRequest() + dealRes := cynosdb.NewDescribeResourcesByDealNameResponse() + dealReq.DealName = dealName + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + dealRes, err = meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCynosdbClient().DescribeResourcesByDealName(dealReq) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, reason:%s", logId, request.GetAction(), err.Error()) + if sdkErr, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + if sdkErr.Code == "InvalidParameterValue.DealNameNotFound" { + return resource.RetryableError(fmt.Errorf("DealName[%s] Not Found, retry... reason: %s", *dealName, err.Error())) + } + } + return tccommon.RetryError(err) + } + return nil + }) + if err != nil { + return err + } + + if dealRes != nil && dealRes.Response != nil && len(dealRes.Response.BillingResourceInfos) != 1 && len(dealRes.Response.BillingResourceInfos[0].InstanceIds) != 1 { return fmt.Errorf("cynosdb readonly instance id count isn't 1") } - d.SetId(*response.Response.ResourceIds[0]) - id := d.Id() + + id := *dealRes.Response.BillingResourceInfos[0].InstanceIds[0] + d.SetId(id) // set maintenance info var weekdays []interface{} @@ -268,6 +297,20 @@ func resourceTencentCloudCynosdbReadonlyInstanceDelete(d *schema.ResourceData, m } if forceDelete { + errUpdate := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + _, _, has, e := cynosdbService.DescribeInstanceById(ctx, instanceId) + if e != nil { + return resource.NonRetryableError(e) + } + if has { + return resource.RetryableError(fmt.Errorf("[CRITAL]%s actual example during removal, heavy new essay", logId)) + } + + return nil + }) + if errUpdate != nil { + return errUpdate + } if err = cynosdbService.OfflineInstance(ctx, clusterId, instanceId); err != nil { return err } diff --git a/tencentcloud/services/cynosdb/resource_tc_cynosdb_readonly_instance_test.go b/tencentcloud/services/cynosdb/resource_tc_cynosdb_readonly_instance_test.go index 4d56f4a3e6..626129cea8 100644 --- a/tencentcloud/services/cynosdb/resource_tc_cynosdb_readonly_instance_test.go +++ b/tencentcloud/services/cynosdb/resource_tc_cynosdb_readonly_instance_test.go @@ -34,10 +34,16 @@ func TestAccTencentCloudCynosdbReadonlyInstanceResource(t *testing.T) { resource.TestCheckResourceAttrSet("tencentcloud_cynosdb_readonly_instance.foo", "instance_memory_size"), resource.TestCheckResourceAttrSet("tencentcloud_cynosdb_readonly_instance.foo", "instance_status"), resource.TestCheckResourceAttrSet("tencentcloud_cynosdb_readonly_instance.foo", "instance_storage_size"), - resource.TestCheckResourceAttr("tencentcloud_cynosdb_readonly_instance.foo", "vpc_id", "vpc-4owdpnwr"), - resource.TestCheckResourceAttr("tencentcloud_cynosdb_readonly_instance.foo", "subnet_id", "subnet-m4qpx38w"), + resource.TestCheckResourceAttr("tencentcloud_cynosdb_readonly_instance.foo", "vpc_id", "vpc-m0d2dbnn"), + resource.TestCheckResourceAttr("tencentcloud_cynosdb_readonly_instance.foo", "subnet_id", "subnet-j10lsueq"), ), }, + { + ResourceName: "tencentcloud_cynosdb_readonly_instance.foo", + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"force_delete"}, + }, { Config: testAccCynosdbReadonlyInstance_update, Check: resource.ComposeTestCheckFunc( @@ -48,12 +54,6 @@ func TestAccTencentCloudCynosdbReadonlyInstanceResource(t *testing.T) { resource.TestCheckResourceAttr("tencentcloud_cynosdb_readonly_instance.foo", "instance_memory_size", "4"), ), }, - { - ResourceName: "tencentcloud_cynosdb_readonly_instance.foo", - ImportState: true, - ImportStateVerify: true, - ImportStateVerifyIgnore: []string{"force_delete"}, - }, }, }) } @@ -105,12 +105,24 @@ func testAccCheckCynosdbReadonlyInstanceExists(n string) resource.TestCheckFunc } const readonlyInstanceVar = ` +variable "availability_zone" { + default = "ap-guangzhou-3" +} + +variable "my_vpc" { + default = "vpc-m0d2dbnn" +} + +variable "my_subnet" { + default = "subnet-j10lsueq" +} + variable "readonly_subnet" { - default = "subnet-m4qpx38w" + default = "subnet-j10lsueq" } ` -const testAccCynosdbReadonlyInstance = testAccCynosdbBasic + readonlyInstanceVar + ` +const testAccCynosdbReadonlyInstance = readonlyInstanceVar + ` resource "tencentcloud_cynosdb_cluster" "foo" { available_zone = var.availability_zone vpc_id = var.my_vpc @@ -139,9 +151,9 @@ resource "tencentcloud_cynosdb_cluster" "foo" { current_value = "utf8" } -# tags = { -# test = "test" -# } + tags = { + test = "test" + } force_delete = true @@ -173,7 +185,7 @@ resource "tencentcloud_cynosdb_readonly_instance" "foo" { } ` -const testAccCynosdbReadonlyInstance_update = testAccCynosdbBasic + ` +const testAccCynosdbReadonlyInstance_update = readonlyInstanceVar + ` resource "tencentcloud_cynosdb_cluster" "foo" { available_zone = var.availability_zone vpc_id = var.my_vpc @@ -202,9 +214,9 @@ resource "tencentcloud_cynosdb_cluster" "foo" { current_value = "utf8" } -# tags = { -# test = "test" -# } + tags = { + test = "test" + } force_delete = true From f0e60798707a69085438d257bc905c75a6416788 Mon Sep 17 00:00:00 2001 From: arunma Date: Thu, 16 May 2024 10:22:38 +0800 Subject: [PATCH 2/3] fix: improvement id empty situation --- tencentcloud/acctest/basic.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tencentcloud/acctest/basic.go b/tencentcloud/acctest/basic.go index 6516a9329e..9e00579b65 100644 --- a/tencentcloud/acctest/basic.go +++ b/tencentcloud/acctest/basic.go @@ -406,11 +406,12 @@ locals { const DefaultSecurityGroupData = FixedTagVariable + ` data "tencentcloud_security_groups" "internal" { - name = "keep-reject-all" + name = "default" + tags = var.fixed_tags } data "tencentcloud_security_groups" "exclusive" { - name = "keep-reject-all" + name = "test_preset_sg" } locals { From 546adb9cad5f76ed687bd615588856ede40198f4 Mon Sep 17 00:00:00 2001 From: arunma Date: Thu, 16 May 2024 10:36:59 +0800 Subject: [PATCH 3/3] feat: add changelog --- .changelog/2636.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .changelog/2636.txt diff --git a/.changelog/2636.txt b/.changelog/2636.txt new file mode 100644 index 0000000000..24985d7fe7 --- /dev/null +++ b/.changelog/2636.txt @@ -0,0 +1,3 @@ +```release-note:enhancement +resource/tencentcloud_cynosdb_readonly_instance: improvement id empty situation +```