Skip to content

Commit 1b305e2

Browse files
committed
add resource SQL Server
1 parent b6755a3 commit 1b305e2

32 files changed

+2825
-461
lines changed

examples/tencentcloud-sqlserver/main.tf

Lines changed: 47 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,53 @@ resource "tencentcloud_sqlserver_instance" "example" {
2828

2929
resource "tencentcloud_sqlserver_db" "example" {
3030
instance_id = tencentcloud_sqlserver_instance.example.id
31-
name = "example"
32-
charset = "Chinese_PRC_BIN"
33-
remark = "test-remark"
31+
name = "example"
32+
charset = "Chinese_PRC_BIN"
33+
remark = "tf"
3434
}
3535

36-
data "tencentcloud_sqlserver_db" "example" {
36+
resource "tencentcloud_sqlserver_account" "example" {
37+
instance_id = tencentcloud_sqlserver_instance.example.id
38+
name = "example"
39+
password = "test1233"
40+
remark = "tf"
41+
}
42+
43+
resource "tencentcloud_sqlserver_account_db_attachment" "example" {
44+
instance_id = tencentcloud_sqlserver_instance.example.id
45+
account_name = tencentcloud_sqlserver_account.example.name
46+
db_name = tencentcloud_sqlserver_db.example.name
47+
privilege = "ReadWrite"
48+
}
49+
50+
data "tencentcloud_sqlserver_instances" "id_example" {
51+
id = tencentcloud_sqlserver_instance.example.id
52+
}
53+
54+
data "tencentcloud_sqlserver_instances" "vpc_example" {
55+
vpc_id = tencentcloud_vpc.foo.id
56+
subnet_id = tencentcloud_subnet.foo.id
57+
}
58+
59+
data "tencentcloud_sqlserver_instances" "project_example" {
60+
project_id = 0
61+
}
62+
63+
data "tencentcloud_sqlserver_dbs" "example" {
3764
instance_id = tencentcloud_sqlserver_db.example.instance_id
38-
}
65+
}
66+
67+
data "tencentcloud_sqlserver_accounts" "example" {
68+
instance_id = tencentcloud_sqlserver_instance.example.id
69+
}
70+
71+
data "tencentcloud_sqlserver_account_db_attachments" "example" {
72+
instance_id = tencentcloud_sqlserver_instance.example.id
73+
account_name = tencentcloud_sqlserver_account.example.name
74+
}
75+
76+
data "tencentcloud_sqlserver_backups" "example" {
77+
instance_id = tencentcloud_sqlserver_instance.example.id
78+
start_time = "2020-06-30 00:00:00"
79+
end_time = "2020-07-01 00:00:00"
80+
}
Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
/*
2+
Use this data source to query the list of SQL Server account DB privileges.
3+
4+
Example Usage
5+
6+
```hcl
7+
data "tencentcloud_sqlserver_accounts" "account" {
8+
instance_id = "mssql-3cdq7kx5"
9+
account_name = "myaccount"
10+
}
11+
12+
data "tencentcloud_sqlserver_accounts" "db" {
13+
instance_id = "mssql-3cdq7kx5"
14+
db_name = "mydb"
15+
}
16+
17+
data "tencentcloud_sqlserver_accounts" "instance" {
18+
instance_id = "mssql-3cdq7kx5"
19+
}
20+
```
21+
*/
22+
package tencentcloud
23+
24+
import (
25+
"context"
26+
"fmt"
27+
"log"
28+
29+
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
30+
"github.com/terraform-providers/terraform-provider-tencentcloud/tencentcloud/internal/helper"
31+
)
32+
33+
func dataSourceTencentCloudSqlserverAccountDBAttachments() *schema.Resource {
34+
return &schema.Resource{
35+
Read: dataSourceTencentSqlserverAccountDBAttachmentsRead,
36+
Schema: map[string]*schema.Schema{
37+
"instance_id": {
38+
Type: schema.TypeString,
39+
Required: true,
40+
Description: "SQL Server instance ID that the account belongs to.",
41+
},
42+
"account_name": {
43+
Type: schema.TypeString,
44+
Optional: true,
45+
Default: "",
46+
Description: "Name of the SQL Server account to be queried.",
47+
},
48+
"db_name": {
49+
Type: schema.TypeString,
50+
Optional: true,
51+
Default: "",
52+
Description: "Name of the SQL Server account to be queried.",
53+
},
54+
"result_output_file": {
55+
Type: schema.TypeString,
56+
Optional: true,
57+
Description: "Used to store results.",
58+
},
59+
// Computed values
60+
"list": {
61+
Type: schema.TypeList,
62+
Computed: true,
63+
Description: "A list of SQL Server account. Each element contains the following attributes:",
64+
Elem: &schema.Resource{
65+
Schema: map[string]*schema.Schema{
66+
"instance_id": {
67+
Type: schema.TypeString,
68+
Computed: true,
69+
Description: "SQL Server instance ID that the account belongs to.",
70+
},
71+
"account_name": {
72+
Type: schema.TypeString,
73+
Computed: true,
74+
Description: "SQL Server account name.",
75+
},
76+
"db_name": {
77+
Type: schema.TypeString,
78+
Computed: true,
79+
Description: "SQL Server DB name.",
80+
},
81+
"privilege": {
82+
Type: schema.TypeString,
83+
Computed: true,
84+
Description: "Privilege of the account on DB. Valid value are `READONLY`, `ReadWrite`.",
85+
},
86+
},
87+
},
88+
},
89+
},
90+
}
91+
}
92+
93+
func dataSourceTencentSqlserverAccountDBAttachmentsRead(d *schema.ResourceData, meta interface{}) error {
94+
defer logElapsed("data_source.tencentcloud_sqlserver_backup_list.read")()
95+
96+
logId := getLogId(contextNil)
97+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
98+
99+
instanceId := d.Get("instance_id").(string)
100+
accountName := d.Get("account_name").(string)
101+
dbName := d.Get("db_name").(string)
102+
103+
sqlserverService := SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn}
104+
105+
attachments, err := sqlserverService.DescribeAccountDBAttachments(ctx, instanceId, accountName, dbName)
106+
107+
if err != nil {
108+
return fmt.Errorf("api[DescribeAccountDBAttachments]fail, return %s", err.Error())
109+
}
110+
111+
var list []map[string]interface{}
112+
var ids = make([]string, len(attachments))
113+
114+
for _, item := range attachments {
115+
mapping := map[string]interface{}{
116+
"instance_id": instanceId,
117+
"account_name": item["account_name"],
118+
"db_name": item["db_name"],
119+
"privilege": item["privilege"],
120+
}
121+
122+
list = append(list, mapping)
123+
ids = append(ids, fmt.Sprintf("%s%s%s%s%s", instanceId, FILED_SP, accountName, FILED_SP, dbName))
124+
}
125+
126+
d.SetId(helper.DataResourceIdsHash(ids))
127+
if e := d.Set("list", list); e != nil {
128+
log.Printf("[CRITAL]%s provider set list fail, reason:%s\n", logId, e.Error())
129+
return e
130+
}
131+
output, ok := d.GetOk("result_output_file")
132+
if ok && output.(string) != "" {
133+
return writeToFile(output.(string), list)
134+
}
135+
136+
return nil
137+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package tencentcloud
2+
3+
import (
4+
"testing"
5+
6+
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
7+
)
8+
9+
var testDataSqlserverAccountDBAttachmentsName = "data.tencentcloud_sqlserver_account_db_attachments.test"
10+
11+
func TestAccTencentCloudDataSqlserverAccountDBAttachments(t *testing.T) {
12+
resource.Test(t, resource.TestCase{
13+
PreCheck: func() { testAccPreCheck(t) },
14+
Providers: testAccProviders,
15+
CheckDestroy: testAccCheckLBDestroy,
16+
Steps: []resource.TestStep{
17+
{
18+
Config: testAccTencentCloudDataSqlserverAccountDBAttachmentsBasic,
19+
Check: resource.ComposeTestCheckFunc(
20+
resource.TestCheckResourceAttr(testDataSqlserverAccountDBAttachmentsName, "list.#", "1"),
21+
resource.TestCheckResourceAttr(testDataSqlserverAccountDBAttachmentsName, "list.0.instance_id", "mssql-3cdq7kx5"),
22+
resource.TestCheckResourceAttr(testDataSqlserverAccountDBAttachmentsName, "list.0.account_name", "tf_sqlserver_account"),
23+
resource.TestCheckResourceAttrSet(testDataSqlserverAccountDBAttachmentsName, "list.0.db_name"),
24+
resource.TestCheckResourceAttrSet(testDataSqlserverAccountDBAttachmentsName, "list.0.privilege"),
25+
),
26+
},
27+
},
28+
})
29+
}
30+
31+
const testAccTencentCloudDataSqlserverAccountDBAttachmentsBasic = testAccSqlserverDB_basic + `
32+
data "tencentcloud_sqlserver_account_db_attachments" "test"{
33+
instance_id = tencentcloud_sqlserver_instance.test.id
34+
account_name = "tf_sqlserver_account"
35+
}
36+
`
Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
/*
2+
Use this data source to query the list of SQL Server accounts.
3+
4+
Example Usage
5+
6+
```hcl
7+
data "tencentcloud_sqlserver_accounts" "name" {
8+
instance_id = "mssql-3cdq7kx5"
9+
name = "myaccount"
10+
}
11+
12+
data "tencentcloud_sqlserver_accounts" "foo" {
13+
instance_id = "mssql-3cdq7kx5"
14+
}
15+
```
16+
*/
17+
package tencentcloud
18+
19+
import (
20+
"context"
21+
"fmt"
22+
"log"
23+
24+
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
25+
"github.com/terraform-providers/terraform-provider-tencentcloud/tencentcloud/internal/helper"
26+
)
27+
28+
func dataSourceTencentCloudSqlserverAccounts() *schema.Resource {
29+
return &schema.Resource{
30+
Read: dataSourceTencentSqlserverAccountsRead,
31+
Schema: map[string]*schema.Schema{
32+
"instance_id": {
33+
Type: schema.TypeString,
34+
Required: true,
35+
Description: "SQL server instance ID that the account belongs to.",
36+
},
37+
"name": {
38+
Type: schema.TypeString,
39+
Optional: true,
40+
Description: "Name of the SQL server account to be queried.",
41+
},
42+
"result_output_file": {
43+
Type: schema.TypeString,
44+
Optional: true,
45+
Description: "Used to store results.",
46+
},
47+
// Computed values
48+
"list": {
49+
Type: schema.TypeList,
50+
Computed: true,
51+
Description: "A list of SQL Server account. Each element contains the following attributes:",
52+
Elem: &schema.Resource{
53+
Schema: map[string]*schema.Schema{
54+
"instance_id": {
55+
Type: schema.TypeString,
56+
Computed: true,
57+
Description: "SQL server instance ID that the account belongs to.",
58+
},
59+
"name": {
60+
Type: schema.TypeString,
61+
Computed: true,
62+
Description: "Name of the SQL server account.",
63+
},
64+
"remark": {
65+
Type: schema.TypeString,
66+
Computed: true,
67+
Description: "Remark of the SQL Server account.",
68+
},
69+
//computed
70+
"status": {
71+
Type: schema.TypeInt,
72+
Computed: true,
73+
Description: "Status of the SQL Server account. 1 for creating, 2 for running, 3 for modifying, 4 for resetting password, -1 for deleting.",
74+
},
75+
"create_time": {
76+
Type: schema.TypeString,
77+
Computed: true,
78+
Description: "Create time of the SQL Server account.",
79+
},
80+
"update_time": {
81+
Type: schema.TypeString,
82+
Computed: true,
83+
Description: "Last updated time of the SQL Server account.",
84+
},
85+
},
86+
},
87+
},
88+
},
89+
}
90+
}
91+
92+
func dataSourceTencentSqlserverAccountsRead(d *schema.ResourceData, meta interface{}) error {
93+
defer logElapsed("data_source.tencentcloud_sqlserver_backup_list.read")()
94+
95+
logId := getLogId(contextNil)
96+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
97+
98+
instanceId := d.Get("instance_id").(string)
99+
100+
sqlserverService := SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn}
101+
102+
accounts, err := sqlserverService.DescribeSqlserverAccounts(ctx, instanceId)
103+
104+
if err != nil {
105+
return fmt.Errorf("api[DescribeAccounts]fail, return %s", err.Error())
106+
}
107+
108+
var list []map[string]interface{}
109+
var ids = make([]string, len(accounts))
110+
111+
for _, item := range accounts {
112+
mapping := map[string]interface{}{
113+
"remark": item.Remark,
114+
"name": item.Name,
115+
"status": item.Status,
116+
"create_time": item.CreateTime,
117+
"update_time": item.UpdateTime,
118+
"instance_id": instanceId,
119+
}
120+
if v, ok := d.GetOk("name"); ok && v.(string) != *item.Name {
121+
continue
122+
}
123+
list = append(list, mapping)
124+
ids = append(ids, fmt.Sprintf("%s%s%s", instanceId, FILED_SP, *item.Name))
125+
}
126+
127+
d.SetId(helper.DataResourceIdsHash(ids))
128+
if e := d.Set("list", list); e != nil {
129+
log.Printf("[CRITAL]%s provider set list fail, reason:%s\n", logId, e.Error())
130+
return e
131+
}
132+
output, ok := d.GetOk("result_output_file")
133+
if ok && output.(string) != "" {
134+
return writeToFile(output.(string), list)
135+
}
136+
137+
return nil
138+
}

0 commit comments

Comments
 (0)