Skip to content

Commit 64a7cc4

Browse files
author
brickzzhang
committed
[enhancement for sqlserver db resource]
1. add import func 2. modify id generation way 3. modify description 4. modify test func
1 parent 35eca67 commit 64a7cc4

File tree

5 files changed

+87
-122
lines changed

5 files changed

+87
-122
lines changed

tencentcloud/extension_sqlserver.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,12 +45,12 @@ const (
4545
SQLSERVER_DB_CREATING = 1
4646
SQLSERVER_DB_RUNNING = 2
4747
SQLSERVER_DB_MODIFYING = 3
48-
SQLSERVER_DB_DROPPING = -1
48+
SQLSERVER_DB_DELETING = -1
4949
)
5050

5151
var SQLSERVER_DB_STATUS = map[int64]string{
5252
SQLSERVER_DB_CREATING: "creating",
5353
SQLSERVER_DB_RUNNING: "running",
5454
SQLSERVER_DB_MODIFYING: "modifying",
55-
SQLSERVER_DB_DROPPING: "dropping",
55+
SQLSERVER_DB_DELETING: "deleting",
5656
}

tencentcloud/resource_tc_sqlserver_db.go

Lines changed: 32 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
Provides a SQLServer DB resource to database belongs to SQLServer instance.
2+
Provides a SQLServer DB resource belongs to SQLServer instance.
33
44
Example Usage
55
@@ -17,6 +17,7 @@ package tencentcloud
1717
import (
1818
"context"
1919
"fmt"
20+
"strings"
2021

2122
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
2223
)
@@ -27,17 +28,22 @@ func resourceTencentCloudSqlserverDB() *schema.Resource {
2728
Read: resourceTencentCloudSqlserverDBRead,
2829
Update: resourceTencentCloudSqlserverDBUpdate,
2930
Delete: resourceTencentCloudSqlserverDBDelete,
31+
Importer: &schema.ResourceImporter{
32+
State: schema.ImportStatePassthrough,
33+
},
3034

3135
Schema: map[string]*schema.Schema{
3236
"instance_id": {
3337
Type: schema.TypeString,
3438
Required: true,
39+
ForceNew: true,
3540
Description: "SQL server instance ID which DB belongs to.",
3641
},
3742
"name": {
3843
Type: schema.TypeString,
3944
Required: true,
40-
Description: "Name of DB. The DataBase name must be unique and must be composed of numbers, letters and underlines, and the first one can not be underline.",
45+
ForceNew: true,
46+
Description: "Name of SQLServer DB. The DataBase name must be unique and must be composed of numbers, letters and underlines, and the first one can not be underline.",
4147
},
4248
"charset": {
4349
Type: schema.TypeString,
@@ -61,7 +67,7 @@ func resourceTencentCloudSqlserverDB() *schema.Resource {
6167
"status": {
6268
Type: schema.TypeString,
6369
Computed: true,
64-
Description: "Database status. Valid values are `creating`, `running`, `modifying`, `dropping`.",
70+
Description: "Database status could be `creating`, `running`, `modifying` which means changing the remark, and `deleting`.",
6571
},
6672
},
6773
}
@@ -92,6 +98,7 @@ func resourceTencentCloudSqlserverDBCreate(d *schema.ResourceData, meta interfac
9298
return err
9399
}
94100

101+
d.SetId(instanceID + FILED_SP + dbName)
95102
return resourceTencentCloudSqlserverDBRead(d, meta)
96103
}
97104

@@ -101,22 +108,28 @@ func resourceTencentCloudSqlserverDBRead(d *schema.ResourceData, meta interface{
101108
logId := getLogId(contextNil)
102109
ctx := context.WithValue(context.TODO(), logIdKey, logId)
103110
sqlserverService := SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn}
104-
instanceId := d.Get("instance_id").(string)
105-
name := d.Get("name").(string)
106-
dbInfo, has, err := sqlserverService.DescribeDBDetailsByName(ctx, instanceId, name)
111+
id := d.Id()
112+
dbInfo, has, err := sqlserverService.DescribeDBDetailsById(ctx, id)
107113
if err != nil {
108114
return err
109115
}
110116
if !has {
111117
d.SetId("")
112118
return nil
113119
}
114-
_ = d.Set("charset", *dbInfo.Charset)
115-
_ = d.Set("remark", *dbInfo.Remark)
116-
_ = d.Set("create_time", *dbInfo.CreateTime)
120+
idItem := strings.Split(id, FILED_SP)
121+
if len(idItem) < 2 {
122+
return fmt.Errorf("broken ID of SQLServer DB")
123+
}
124+
instanceId := idItem[0]
125+
dbName := idItem[1]
126+
_ = d.Set("instance_id", instanceId)
127+
_ = d.Set("name", dbName)
128+
_ = d.Set("charset", dbInfo.Charset)
129+
_ = d.Set("remark", dbInfo.Remark)
130+
_ = d.Set("create_time", dbInfo.CreateTime)
117131
_ = d.Set("status", SQLSERVER_DB_STATUS[*dbInfo.Status])
118132

119-
d.SetId(name)
120133
return nil
121134
}
122135

@@ -129,19 +142,10 @@ func resourceTencentCloudSqlserverDBUpdate(d *schema.ResourceData, meta interfac
129142
sqlserverService := SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn}
130143
instanceId := d.Get("instance_id").(string)
131144

132-
if d.HasChange("name") {
133-
oldValue, newValue := d.GetChange("name")
134-
if err := sqlserverService.ModifySqlserverDBName(ctx, instanceId, oldValue.(string), newValue.(string)); err != nil {
135-
return err
136-
}
137-
d.SetPartial("name")
138-
}
139-
140145
if d.HasChange("remark") {
141146
if err := sqlserverService.ModifySqlserverDBRemark(ctx, instanceId, d.Get("name").(string), d.Get("remark").(string)); err != nil {
142147
return err
143148
}
144-
d.SetPartial("remark")
145149
}
146150

147151
return nil
@@ -158,7 +162,15 @@ func resourceTencentCloudSqlserverDBDelete(d *schema.ResourceData, meta interfac
158162
name := d.Get("name").(string)
159163

160164
// precheck before delete
161-
_, has, err := sqlserverService.DescribeDBDetailsByName(ctx, instanceId, name)
165+
_, has, err := sqlserverService.DescribeSqlserverInstanceById(ctx, instanceId)
166+
if err != nil {
167+
return fmt.Errorf("[CRITAL]%s DescribeSqlserverInstanceById when deleting SQLServer DB fail, reason:%s\n", logId, err)
168+
}
169+
if !has {
170+
return nil
171+
}
172+
id := d.Id()
173+
_, has, err = sqlserverService.DescribeDBDetailsById(ctx, id)
162174
if err != nil {
163175
return err
164176
}

tencentcloud/resource_tc_sqlserver_db_test.go

Lines changed: 26 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -10,66 +10,60 @@ import (
1010
)
1111

1212
func TestAccTencentCloudSqlserverDB_basic_and_update(t *testing.T) {
13-
var instanceId string
14-
var dbName string
15-
1613
resource.Test(t, resource.TestCase{
1714
PreCheck: func() { testAccPreCheck(t) },
1815
Providers: testAccProviders,
19-
CheckDestroy: testAccCheckSqlserverDBDestroy(&instanceId, &dbName),
16+
CheckDestroy: testAccCheckSqlserverDBDestroy,
2017
Steps: []resource.TestStep{
2118
{
2219
Config: testAccSqlserverDB_basic(),
2320
Check: resource.ComposeAggregateTestCheckFunc(
24-
testAccCheckSqlserverDBExists("tencentcloud_sqlserver_db.mysqlserver_db", &instanceId, &dbName),
21+
testAccCheckSqlserverDBExists("tencentcloud_sqlserver_db.mysqlserver_db"),
2522
resource.TestCheckResourceAttr("tencentcloud_sqlserver_db.mysqlserver_db", "instance_id", "mssql-3cdq7kx5"),
2623
resource.TestCheckResourceAttr("tencentcloud_sqlserver_db.mysqlserver_db", "name", "testAccSqlserverDB"),
2724
resource.TestCheckResourceAttr("tencentcloud_sqlserver_db.mysqlserver_db", "charset", "Chinese_PRC_BIN"),
2825
resource.TestCheckResourceAttr("tencentcloud_sqlserver_db.mysqlserver_db", "remark", "testACC-remark"),
2926
resource.TestCheckResourceAttrSet("tencentcloud_sqlserver_db.mysqlserver_db", "create_time"),
3027
resource.TestCheckResourceAttrSet("tencentcloud_sqlserver_db.mysqlserver_db", "status"),
3128
),
29+
Destroy: false,
3230
},
3331
{
34-
Config: testAccSqlserverDB_basic_update_name(),
35-
Check: resource.ComposeAggregateTestCheckFunc(
36-
testAccCheckSqlserverDBExists("tencentcloud_sqlserver_db.mysqlserver_db", &instanceId, &dbName),
37-
resource.TestCheckResourceAttr("tencentcloud_sqlserver_db.mysqlserver_db", "name", "testAccSqlserverDB_update"),
38-
),
32+
ResourceName: "tencentcloud_sqlserver_db.mysqlserver_db",
33+
ImportState: true,
34+
ImportStateVerify: true,
3935
},
4036
{
4137
Config: testAccSqlserverDB_basic_update_remark(),
4238
Check: resource.ComposeAggregateTestCheckFunc(
43-
testAccCheckSqlserverDBExists("tencentcloud_sqlserver_db.mysqlserver_db", &instanceId, &dbName),
39+
testAccCheckSqlserverDBExists("tencentcloud_sqlserver_db.mysqlserver_db"),
4440
resource.TestCheckResourceAttr("tencentcloud_sqlserver_db.mysqlserver_db", "remark", "testACC-remark_update"),
4541
),
4642
},
4743
},
4844
})
4945
}
5046

51-
func testAccCheckSqlserverDBDestroy(instanceId *string, dbName *string) resource.TestCheckFunc {
52-
return func(s *terraform.State) error {
53-
logId := getLogId(contextNil)
54-
ctx := context.WithValue(context.TODO(), logIdKey, logId)
55-
sqlserverService := SqlserverService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn}
56-
for _, rs := range s.RootModule().Resources {
57-
if rs.Type != "tencentcloud_sqlserver_db" {
58-
continue
59-
}
60-
_, has, err := sqlserverService.DescribeDBDetailsByName(ctx, *instanceId, *dbName)
61-
if has {
62-
return fmt.Errorf("SQLServer DB still exists")
63-
}
64-
if err != nil {
65-
return err
66-
}
47+
func testAccCheckSqlserverDBDestroy(s *terraform.State) error {
48+
logId := getLogId(contextNil)
49+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
50+
sqlserverService := SqlserverService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn}
51+
for _, rs := range s.RootModule().Resources {
52+
if rs.Type != "tencentcloud_sqlserver_db" {
53+
continue
54+
}
55+
_, has, err := sqlserverService.DescribeDBDetailsById(ctx, rs.Primary.ID)
56+
if has {
57+
return fmt.Errorf("SQLServer DB still exists")
58+
}
59+
if err != nil {
60+
return err
6761
}
68-
return nil
6962
}
63+
return nil
7064
}
7165

72-
func testAccCheckSqlserverDBExists(n string, instanceId *string, dbName *string) resource.TestCheckFunc {
66+
func testAccCheckSqlserverDBExists(n string) resource.TestCheckFunc {
7367
return func(s *terraform.State) error {
7468
logId := getLogId(contextNil)
7569
ctx := context.WithValue(context.TODO(), logIdKey, logId)
@@ -83,16 +77,14 @@ func testAccCheckSqlserverDBExists(n string, instanceId *string, dbName *string)
8377
}
8478

8579
sqlserverService := SqlserverService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn}
86-
_, has, err := sqlserverService.DescribeDBDetailsByName(ctx, rs.Primary.Attributes["instance_id"], rs.Primary.Attributes["name"])
80+
_, has, err := sqlserverService.DescribeDBDetailsById(ctx, rs.Primary.ID)
8781
if !has {
88-
return fmt.Errorf("SQLServer DB %s is not found", rs.Primary.Attributes["name"])
82+
return fmt.Errorf("SQLServer DB %s is not found", rs.Primary.ID)
8983
}
9084
if err != nil {
9185
return err
9286
}
9387

94-
*instanceId = rs.Primary.Attributes["instance_id"]
95-
*dbName = rs.Primary.Attributes["name"]
9688
return nil
9789
}
9890
}
@@ -107,21 +99,11 @@ resource "tencentcloud_sqlserver_db" "mysqlserver_db" {
10799
}`
108100
}
109101

110-
func testAccSqlserverDB_basic_update_name() string {
111-
return `
112-
resource "tencentcloud_sqlserver_db" "mysqlserver_db" {
113-
instance_id = "mssql-3cdq7kx5"
114-
name = "testAccSqlserverDB_update"
115-
charset = "Chinese_PRC_BIN"
116-
remark = "testACC-remark"
117-
}`
118-
}
119-
120102
func testAccSqlserverDB_basic_update_remark() string {
121103
return `
122104
resource "tencentcloud_sqlserver_db" "mysqlserver_db" {
123105
instance_id = "mssql-3cdq7kx5"
124-
name = "testAccSqlserverDB_update"
106+
name = "testAccSqlserverDB"
125107
charset = "Chinese_PRC_BIN"
126108
remark = "testACC-remark_update"
127109
}`

0 commit comments

Comments
 (0)