Skip to content

Commit e895561

Browse files
gitmknhellertang
authored andcommitted
fix(cynosdb): [117461388]improvement id empty situation (#2636)
* fix: improvement id empty situation * fix: improvement id empty situation * feat: add changelog
1 parent 45ef851 commit e895561

File tree

4 files changed

+79
-21
lines changed

4 files changed

+79
-21
lines changed

.changelog/2636.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:enhancement
2+
resource/tencentcloud_cynosdb_readonly_instance: improvement id empty situation
3+
```

tencentcloud/acctest/basic.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ const (
9999
DefaultGaapRealserverIp2 = "1.1.1.5"
100100
DefaultHttpsDomainCertificateId = "cert-7su3evtr"
101101

102-
DefaultSecurityGroup = "sg-ijato2x1"
102+
DefaultSecurityGroup = "sg-05f7wnhn"
103103

104104
DefaultProjectId = "0"
105105

tencentcloud/services/cynosdb/resource_tc_cynosdb_readonly_instance.go

Lines changed: 46 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99

1010
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
1111
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
12+
sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors"
1213
cynosdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb/v20190107"
1314

1415
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
@@ -110,11 +111,39 @@ func resourceTencentCloudCynosdbReadonlyInstanceCreate(d *schema.ResourceData, m
110111
if err != nil {
111112
return err
112113
}
113-
if response != nil && response.Response != nil && len(response.Response.ResourceIds) != 1 {
114+
115+
if response != nil && response.Response != nil && len(response.Response.DealNames) < 1 {
116+
return fmt.Errorf("cynosdb cluster id count isn't 1")
117+
}
118+
119+
dealName := response.Response.DealNames[0]
120+
dealReq := cynosdb.NewDescribeResourcesByDealNameRequest()
121+
dealRes := cynosdb.NewDescribeResourcesByDealNameResponse()
122+
dealReq.DealName = dealName
123+
err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError {
124+
ratelimit.Check(request.GetAction())
125+
dealRes, err = meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCynosdbClient().DescribeResourcesByDealName(dealReq)
126+
if err != nil {
127+
log.Printf("[CRITAL]%s api[%s] fail, reason:%s", logId, request.GetAction(), err.Error())
128+
if sdkErr, ok := err.(*sdkErrors.TencentCloudSDKError); ok {
129+
if sdkErr.Code == "InvalidParameterValue.DealNameNotFound" {
130+
return resource.RetryableError(fmt.Errorf("DealName[%s] Not Found, retry... reason: %s", *dealName, err.Error()))
131+
}
132+
}
133+
return tccommon.RetryError(err)
134+
}
135+
return nil
136+
})
137+
if err != nil {
138+
return err
139+
}
140+
141+
if dealRes != nil && dealRes.Response != nil && len(dealRes.Response.BillingResourceInfos) != 1 && len(dealRes.Response.BillingResourceInfos[0].InstanceIds) != 1 {
114142
return fmt.Errorf("cynosdb readonly instance id count isn't 1")
115143
}
116-
d.SetId(*response.Response.ResourceIds[0])
117-
id := d.Id()
144+
145+
id := *dealRes.Response.BillingResourceInfos[0].InstanceIds[0]
146+
d.SetId(id)
118147

119148
// set maintenance info
120149
var weekdays []interface{}
@@ -268,6 +297,20 @@ func resourceTencentCloudCynosdbReadonlyInstanceDelete(d *schema.ResourceData, m
268297
}
269298

270299
if forceDelete {
300+
errUpdate := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError {
301+
_, _, has, e := cynosdbService.DescribeInstanceById(ctx, instanceId)
302+
if e != nil {
303+
return resource.NonRetryableError(e)
304+
}
305+
if has {
306+
return resource.RetryableError(fmt.Errorf("[CRITAL]%s actual example during removal, heavy new essay", logId))
307+
}
308+
309+
return nil
310+
})
311+
if errUpdate != nil {
312+
return errUpdate
313+
}
271314
if err = cynosdbService.OfflineInstance(ctx, clusterId, instanceId); err != nil {
272315
return err
273316
}

tencentcloud/services/cynosdb/resource_tc_cynosdb_readonly_instance_test.go

Lines changed: 29 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,16 @@ func TestAccTencentCloudCynosdbReadonlyInstanceResource(t *testing.T) {
3434
resource.TestCheckResourceAttrSet("tencentcloud_cynosdb_readonly_instance.foo", "instance_memory_size"),
3535
resource.TestCheckResourceAttrSet("tencentcloud_cynosdb_readonly_instance.foo", "instance_status"),
3636
resource.TestCheckResourceAttrSet("tencentcloud_cynosdb_readonly_instance.foo", "instance_storage_size"),
37-
resource.TestCheckResourceAttr("tencentcloud_cynosdb_readonly_instance.foo", "vpc_id", "vpc-4owdpnwr"),
38-
resource.TestCheckResourceAttr("tencentcloud_cynosdb_readonly_instance.foo", "subnet_id", "subnet-m4qpx38w"),
37+
resource.TestCheckResourceAttr("tencentcloud_cynosdb_readonly_instance.foo", "vpc_id", "vpc-m0d2dbnn"),
38+
resource.TestCheckResourceAttr("tencentcloud_cynosdb_readonly_instance.foo", "subnet_id", "subnet-j10lsueq"),
3939
),
4040
},
41+
{
42+
ResourceName: "tencentcloud_cynosdb_readonly_instance.foo",
43+
ImportState: true,
44+
ImportStateVerify: true,
45+
ImportStateVerifyIgnore: []string{"force_delete"},
46+
},
4147
{
4248
Config: testAccCynosdbReadonlyInstance_update,
4349
Check: resource.ComposeTestCheckFunc(
@@ -48,12 +54,6 @@ func TestAccTencentCloudCynosdbReadonlyInstanceResource(t *testing.T) {
4854
resource.TestCheckResourceAttr("tencentcloud_cynosdb_readonly_instance.foo", "instance_memory_size", "4"),
4955
),
5056
},
51-
{
52-
ResourceName: "tencentcloud_cynosdb_readonly_instance.foo",
53-
ImportState: true,
54-
ImportStateVerify: true,
55-
ImportStateVerifyIgnore: []string{"force_delete"},
56-
},
5757
},
5858
})
5959
}
@@ -105,12 +105,24 @@ func testAccCheckCynosdbReadonlyInstanceExists(n string) resource.TestCheckFunc
105105
}
106106

107107
const readonlyInstanceVar = `
108+
variable "availability_zone" {
109+
default = "ap-guangzhou-3"
110+
}
111+
112+
variable "my_vpc" {
113+
default = "vpc-m0d2dbnn"
114+
}
115+
116+
variable "my_subnet" {
117+
default = "subnet-j10lsueq"
118+
}
119+
108120
variable "readonly_subnet" {
109-
default = "subnet-m4qpx38w"
121+
default = "subnet-j10lsueq"
110122
}
111123
`
112124

113-
const testAccCynosdbReadonlyInstance = testAccCynosdbBasic + readonlyInstanceVar + `
125+
const testAccCynosdbReadonlyInstance = readonlyInstanceVar + `
114126
resource "tencentcloud_cynosdb_cluster" "foo" {
115127
available_zone = var.availability_zone
116128
vpc_id = var.my_vpc
@@ -139,9 +151,9 @@ resource "tencentcloud_cynosdb_cluster" "foo" {
139151
current_value = "utf8"
140152
}
141153
142-
# tags = {
143-
# test = "test"
144-
# }
154+
tags = {
155+
test = "test"
156+
}
145157
146158
force_delete = true
147159
@@ -173,7 +185,7 @@ resource "tencentcloud_cynosdb_readonly_instance" "foo" {
173185
}
174186
`
175187

176-
const testAccCynosdbReadonlyInstance_update = testAccCynosdbBasic + `
188+
const testAccCynosdbReadonlyInstance_update = readonlyInstanceVar + `
177189
resource "tencentcloud_cynosdb_cluster" "foo" {
178190
available_zone = var.availability_zone
179191
vpc_id = var.my_vpc
@@ -202,9 +214,9 @@ resource "tencentcloud_cynosdb_cluster" "foo" {
202214
current_value = "utf8"
203215
}
204216
205-
# tags = {
206-
# test = "test"
207-
# }
217+
tags = {
218+
test = "test"
219+
}
208220
209221
force_delete = true
210222

0 commit comments

Comments
 (0)