Skip to content

Commit b6755a3

Browse files
authored
Merge pull request #2 from brickzzhang/master
[add datasource and enhance testacc]
2 parents 8049178 + 1508e8b commit b6755a3

17 files changed

+397
-67
lines changed

examples/tencentcloud-sqlserver/main.tf

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
data "tencentcloud_sqlserver_zone_config" "mysqlserver" {
1+
data "tencentcloud_sqlserver_zone_configs" "foo" {
22
}
33

44
resource "tencentcloud_vpc" "foo" {
@@ -26,8 +26,13 @@ resource "tencentcloud_sqlserver_instance" "example" {
2626
storage = 10
2727
}
2828

29-
resource "tencentcloud_sqlserver_db" "mysqlserver_db" {
29+
resource "tencentcloud_sqlserver_db" "example" {
3030
instance_id = tencentcloud_sqlserver_instance.example.id
31-
name = "db_brickzzhang_update"
31+
name = "example"
3232
charset = "Chinese_PRC_BIN"
33-
remark = "test-remark-update"
33+
remark = "test-remark"
34+
}
35+
36+
data "tencentcloud_sqlserver_db" "example" {
37+
instance_id = tencentcloud_sqlserver_db.example.instance_id
38+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
variable "availability_zone" {
2+
default = "ap-guangzhou-3"
3+
}

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -456,6 +456,8 @@ github.com/tdakkota/asciicheck v0.0.0-20200416190851-d7f85be797a2 h1:Xr9gkxfOP0K
456456
github.com/tdakkota/asciicheck v0.0.0-20200416190851-d7f85be797a2/go.mod h1:yHp0ai0Z9gUljN3o0xMhYJnH/IcvkdTBOX2fmJ93JEM=
457457
github.com/tencentcloud/tencentcloud-sdk-go v3.0.187+incompatible h1:9hr93p945INwxa67N68EUJuIkUE2iGnMq/YZ6x3JHik=
458458
github.com/tencentcloud/tencentcloud-sdk-go v3.0.187+incompatible/go.mod h1:0PfYow01SHPMhKY31xa+EFz2RStxIqj6JFAJS+IkCi4=
459+
github.com/tencentcloud/tencentcloud-sdk-go v3.0.189+incompatible h1:eLVHwxLW2HFvr48l5sqROircYlq6Lp39EXhyCkK6Jlw=
460+
github.com/tencentcloud/tencentcloud-sdk-go v3.0.189+incompatible/go.mod h1:0PfYow01SHPMhKY31xa+EFz2RStxIqj6JFAJS+IkCi4=
459461
github.com/tencentcloud/tencentcloud-sdk-go v3.0.191+incompatible h1:cycv0fIQDSo9sjWkupzKnKMc+ZT8cKAfoq2WX3b8ozk=
460462
github.com/tencentcloud/tencentcloud-sdk-go v3.0.191+incompatible/go.mod h1:0PfYow01SHPMhKY31xa+EFz2RStxIqj6JFAJS+IkCi4=
461463
github.com/tetafro/godot v0.3.7 h1:+mecr7RKrUKB5UQ1gwqEMn13sDKTyDR8KNIquB9mm+8=
Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
/*
2+
Use this data source to query DB resources for the specific SQLServer instance.
3+
4+
Example Usage
5+
6+
```hcl
7+
variable "availability_zone"{
8+
default = "ap-guangzhou-2"
9+
}
10+
11+
resource "tencentcloud_vpc" "foo" {
12+
name = "example"
13+
cidr_block = "10.0.0.0/16"
14+
}
15+
16+
resource "tencentcloud_subnet" "foo" {
17+
name = "example"
18+
availability_zone = var.availability_zone
19+
vpc_id = tencentcloud_vpc.foo.id
20+
cidr_block = "10.0.0.0/24"
21+
is_multicast = false
22+
}
23+
24+
resource "tencentcloud_sqlserver_instance" "example" {
25+
name = "example"
26+
availability_zone = var.availability_zone
27+
charge_type = "POSTPAID_BY_HOUR"
28+
vpc_id = tencentcloud_vpc.foo.id
29+
subnet_id = tencentcloud_subnet.foo.id
30+
engine_version = "2008R2"
31+
project_id = 0
32+
memory = 2
33+
storage = 10
34+
}
35+
36+
resource "tencentcloud_sqlserver_db" "example" {
37+
instance_id = tencentcloud_sqlserver_instance.example.id
38+
name = "example"
39+
charset = "Chinese_PRC_BIN"
40+
remark = "test-remark"
41+
}
42+
43+
data "tencentcloud_sqlserver_db" "example" {
44+
instance_id = tencentcloud_sqlserver_db.example.instance_id
45+
}
46+
```
47+
*/
48+
package tencentcloud
49+
50+
import (
51+
"context"
52+
"fmt"
53+
"log"
54+
55+
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
56+
)
57+
58+
func dataSourceTencentSqlserverDBs() *schema.Resource {
59+
return &schema.Resource{
60+
Read: dataSourceTencentSqlserverDBRead,
61+
Schema: map[string]*schema.Schema{
62+
"result_output_file": {
63+
Type: schema.TypeString,
64+
Optional: true,
65+
Description: "Used to store results.",
66+
},
67+
"instance_id": {
68+
Type: schema.TypeString,
69+
Required: true,
70+
Description: "SQLServer instance ID which DB belongs to.",
71+
},
72+
// Computed
73+
"db_list": {
74+
Type: schema.TypeList,
75+
Computed: true,
76+
Description: "A list of dbs belong to the specific instance. Each element contains the following attributes:",
77+
Elem: &schema.Resource{
78+
Schema: map[string]*schema.Schema{
79+
"name": {
80+
Type: schema.TypeString,
81+
Computed: true,
82+
Description: "Name of DB.",
83+
},
84+
"charset": {
85+
Type: schema.TypeString,
86+
Computed: true,
87+
Description: "Character set DB uses, could be `Chinese_PRC_CI_AS`, `Chinese_PRC_CS_AS`, `Chinese_PRC_BIN`, `Chinese_Taiwan_Stroke_CI_AS`, `SQL_Latin1_General_CP1_CI_AS`, and `SQL_Latin1_General_CP1_CS_AS`. Default value is `Chinese_PRC_CI_AS`.",
88+
},
89+
"remark": {
90+
Type: schema.TypeString,
91+
Computed: true,
92+
Description: "Remark of the DB.",
93+
},
94+
"create_time": {
95+
Type: schema.TypeString,
96+
Computed: true,
97+
Description: "Database creation time.",
98+
},
99+
"status": {
100+
Type: schema.TypeString,
101+
Computed: true,
102+
Description: "Database status. Valid values are `creating`, `running`, `modifying`, `dropping`.",
103+
},
104+
},
105+
},
106+
},
107+
},
108+
}
109+
}
110+
111+
func dataSourceTencentSqlserverDBRead(d *schema.ResourceData, meta interface{}) error {
112+
defer logElapsed("data_source.tencent_sqlserver_db.read")()
113+
114+
logId := getLogId(contextNil)
115+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
116+
sqlserverService := SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn}
117+
118+
// precheck
119+
instanceId := d.Get("instance_id").(string)
120+
_, has, err := sqlserverService.DescribeSqlserverInstanceById(ctx, instanceId)
121+
if err != nil {
122+
return fmt.Errorf("[CRITAL]%s DescribeSqlserverInstanceById fail, reason:%s\n", logId, err)
123+
}
124+
if !has {
125+
return fmt.Errorf("[CRITAL]%s SQLServer instance %s dose not exist", logId, instanceId)
126+
}
127+
_ = d.Set("instance_id", instanceId)
128+
129+
dbInfos, err := sqlserverService.DescribeDBsOfInstance(ctx, instanceId)
130+
if err != nil {
131+
return err
132+
}
133+
134+
var dbList []map[string]interface{}
135+
for _, item := range dbInfos {
136+
var dbInfo = make(map[string]interface{})
137+
dbInfo["name"] = item.Name
138+
dbInfo["charset"] = item.Charset
139+
dbInfo["remark"] = item.Remark
140+
dbInfo["create_time"] = item.CreateTime
141+
dbInfo["status"] = SQLSERVER_DB_STATUS[*item.Status]
142+
dbList = append(dbList, dbInfo)
143+
}
144+
_ = d.Set("db_list", dbList)
145+
d.SetId(instanceId)
146+
147+
if output, ok := d.GetOk("result_output_file"); ok && output.(string) != "" {
148+
if err := writeToFile(output.(string), dbList); err != nil {
149+
log.Printf("[CRITAL]%s output file[%s] fail, reason[%s]\n",
150+
logId, output.(string), err.Error())
151+
}
152+
}
153+
return nil
154+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package tencentcloud
2+
3+
import (
4+
"testing"
5+
6+
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
7+
)
8+
9+
func TestAccDataSourceTencentCloudSqlserverDBs_basic(t *testing.T) {
10+
resource.Test(t, resource.TestCase{
11+
PreCheck: func() { testAccPreCheck(t) },
12+
Providers: testAccProviders,
13+
Steps: []resource.TestStep{
14+
{
15+
Config: TestAccDataSourceTencentCloudSqlserverDB,
16+
Check: resource.ComposeTestCheckFunc(
17+
testAccCheckTencentCloudDataSourceID("data.tencentcloud_sqlserver_dbs.foo"),
18+
resource.TestCheckResourceAttrSet("data.tencentcloud_sqlserver_dbs.foo", "instance_id"),
19+
resource.TestCheckResourceAttrSet("data.tencentcloud_sqlserver_dbs.foo", "db_list.0.name"),
20+
resource.TestCheckResourceAttrSet("data.tencentcloud_sqlserver_dbs.foo", "db_list.0.charset"),
21+
resource.TestCheckResourceAttrSet("data.tencentcloud_sqlserver_dbs.foo", "db_list.0.remark"),
22+
resource.TestCheckResourceAttrSet("data.tencentcloud_sqlserver_dbs.foo", "db_list.0.create_time"),
23+
resource.TestCheckResourceAttrSet("data.tencentcloud_sqlserver_dbs.foo", "db_list.0.status"),
24+
),
25+
},
26+
},
27+
})
28+
}
29+
30+
const TestAccDataSourceTencentCloudSqlserverDB = testAccSqlserverDB_basic + `
31+
data "tencentcloud_sqlserver_dbs" "foo" {
32+
instance_id = tencentcloud_sqlserver_db.mysqlserver_db.instance_id
33+
}
34+
`

tencentcloud/data_source_tc_sqlserver_zone_config.go renamed to tencentcloud/data_source_tc_sqlserver_zone_configs.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ Use this data source to query purchasable specification configuration for each a
44
Example Usage
55
66
```hcl
7-
data "tencentcloud_sqlserver_zone_config" "mysqlserver" {
7+
data "tencentcloud_sqlserver_zone_configs" "mysqlserver" {
88
}
99
```
1010
*/
@@ -18,7 +18,7 @@ import (
1818
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
1919
)
2020

21-
func dataSourceTencentSqlserverZoneConfig() *schema.Resource {
21+
func dataSourceTencentSqlserverZoneConfigs() *schema.Resource {
2222
return &schema.Resource{
2323
Read: dataSourceTencentSqlserverZoneConfigRead,
2424
Schema: map[string]*schema.Schema{

tencentcloud/data_source_tc_sqlserver_zone_config_test.go renamed to tencentcloud/data_source_tc_sqlserver_zone_configs_test.go

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,34 +6,34 @@ import (
66
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
77
)
88

9-
func TestAccDataSourceTencentCloudSqlserverZoneConfig_basic(t *testing.T) {
9+
func TestAccDataSourceTencentCloudSqlserverZoneConfigs_basic(t *testing.T) {
1010
resource.Test(t, resource.TestCase{
1111
PreCheck: func() { testAccPreCheck(t) },
1212
Providers: testAccProviders,
1313
Steps: []resource.TestStep{
1414
{
1515
Config: TestAccDataSourceTencentCloudSqlserverZoneConfig,
1616
Check: resource.ComposeTestCheckFunc(
17-
testAccCheckTencentCloudDataSourceID("data.tencentcloud_sqlserver_zone_config.foo"),
18-
resource.TestCheckResourceAttrSet("data.tencentcloud_sqlserver_zone_config.foo", "zone_list.0.availability_zone"),
19-
resource.TestCheckResourceAttrSet("data.tencentcloud_sqlserver_zone_config.foo", "zone_list.0.zone_id"),
20-
resource.TestCheckResourceAttrSet("data.tencentcloud_sqlserver_zone_config.foo", "zone_list.0.specinfo_list.0.spec_id"),
21-
resource.TestCheckResourceAttrSet("data.tencentcloud_sqlserver_zone_config.foo", "zone_list.0.specinfo_list.0.machine_type"),
22-
resource.TestCheckResourceAttrSet("data.tencentcloud_sqlserver_zone_config.foo", "zone_list.0.specinfo_list.0.db_version"),
23-
resource.TestCheckResourceAttrSet("data.tencentcloud_sqlserver_zone_config.foo", "zone_list.0.specinfo_list.0.db_version_name"),
24-
resource.TestCheckResourceAttrSet("data.tencentcloud_sqlserver_zone_config.foo", "zone_list.0.specinfo_list.0.memory"),
25-
resource.TestCheckResourceAttrSet("data.tencentcloud_sqlserver_zone_config.foo", "zone_list.0.specinfo_list.0.cpu"),
26-
resource.TestCheckResourceAttrSet("data.tencentcloud_sqlserver_zone_config.foo", "zone_list.0.specinfo_list.0.min_storage_size"),
27-
resource.TestCheckResourceAttrSet("data.tencentcloud_sqlserver_zone_config.foo", "zone_list.0.specinfo_list.0.max_storage_size"),
28-
resource.TestCheckResourceAttrSet("data.tencentcloud_sqlserver_zone_config.foo", "zone_list.0.specinfo_list.0.qps"),
29-
resource.TestCheckResourceAttrSet("data.tencentcloud_sqlserver_zone_config.foo", "zone_list.0.specinfo_list.0.charge_type"),
17+
testAccCheckTencentCloudDataSourceID("data.tencentcloud_sqlserver_zone_configs.foo"),
18+
resource.TestCheckResourceAttrSet("data.tencentcloud_sqlserver_zone_configs.foo", "zone_list.0.availability_zone"),
19+
resource.TestCheckResourceAttrSet("data.tencentcloud_sqlserver_zone_configs.foo", "zone_list.0.zone_id"),
20+
resource.TestCheckResourceAttrSet("data.tencentcloud_sqlserver_zone_configs.foo", "zone_list.0.specinfo_list.0.spec_id"),
21+
resource.TestCheckResourceAttrSet("data.tencentcloud_sqlserver_zone_configs.foo", "zone_list.0.specinfo_list.0.machine_type"),
22+
resource.TestCheckResourceAttrSet("data.tencentcloud_sqlserver_zone_configs.foo", "zone_list.0.specinfo_list.0.db_version"),
23+
resource.TestCheckResourceAttrSet("data.tencentcloud_sqlserver_zone_configs.foo", "zone_list.0.specinfo_list.0.db_version_name"),
24+
resource.TestCheckResourceAttrSet("data.tencentcloud_sqlserver_zone_configs.foo", "zone_list.0.specinfo_list.0.memory"),
25+
resource.TestCheckResourceAttrSet("data.tencentcloud_sqlserver_zone_configs.foo", "zone_list.0.specinfo_list.0.cpu"),
26+
resource.TestCheckResourceAttrSet("data.tencentcloud_sqlserver_zone_configs.foo", "zone_list.0.specinfo_list.0.min_storage_size"),
27+
resource.TestCheckResourceAttrSet("data.tencentcloud_sqlserver_zone_configs.foo", "zone_list.0.specinfo_list.0.max_storage_size"),
28+
resource.TestCheckResourceAttrSet("data.tencentcloud_sqlserver_zone_configs.foo", "zone_list.0.specinfo_list.0.qps"),
29+
resource.TestCheckResourceAttrSet("data.tencentcloud_sqlserver_zone_configs.foo", "zone_list.0.specinfo_list.0.charge_type"),
3030
),
3131
},
3232
},
3333
})
3434
}
3535

3636
const TestAccDataSourceTencentCloudSqlserverZoneConfig = `
37-
data "tencentcloud_sqlserver_zone_config" "foo" {
37+
data "tencentcloud_sqlserver_zone_configs" "foo" {
3838
}
3939
`

tencentcloud/extension_sqlserver.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,4 +54,3 @@ var SQLSERVER_DB_STATUS = map[int64]string{
5454
SQLSERVER_DB_MODIFYING: "modifying",
5555
SQLSERVER_DB_DELETING: "deleting",
5656
}
57-

tencentcloud/provider.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -313,10 +313,11 @@ Serverless Cloud Function(SCF)
313313
314314
SQLServer
315315
Data Source
316-
tencentcloud_sqlserver_zone_config
316+
tencentcloud_sqlserver_zone_configs
317+
tencentcloud_sqlserver_dbs
317318
318319
Resource
319-
tencentcloud_sqlserver_instance
320+
tencentcloud_sqlserver_instance
320321
tencentcloud_sqlserver_db
321322
322323
@@ -601,7 +602,8 @@ func Provider() terraform.ResourceProvider {
601602
"tencentcloud_elasticsearch_instances": dataSourceTencentCloudElasticsearchInstances(),
602603
"tencentcloud_postgresql_instances": dataSourceTencentCloudPostgresqlInstances(),
603604
"tencentcloud_postgresql_specinfos": dataSourceTencentCloudPostgresqlSpecinfos(),
604-
"tencentcloud_sqlserver_zone_config": dataSourceTencentSqlserverZoneConfig(),
605+
"tencentcloud_sqlserver_zone_configs": dataSourceTencentSqlserverZoneConfigs(),
606+
"tencentcloud_sqlserver_dbs": dataSourceTencentSqlserverDBs(),
605607
},
606608

607609
ResourcesMap: map[string]*schema.Resource{

0 commit comments

Comments
 (0)