Skip to content

Commit 188766a

Browse files
authored
Feat/support sqlserver db clone (#1765)
* feat/support-sqlserver-backup * feat/support-sqlserver-backup * feat/support-sqlserver-backup * feat/support-sqlserver-backup * feat/support-sqlserver-backup * feat/support-sqlserver-backup * feat/support-sqlserver-backup * feat/support-sqlserver-backup * feat/support-sqlserver-db-clone * feat/support-sqlserver-db-clone * feat/support-sqlserver-db-clone * feat/support-sqlserver-db-clone * feat/support-sqlserver-db-clone * feat/support-sqlserver-db-clone
1 parent d932653 commit 188766a

26 files changed

+1828
-11
lines changed

.changelog/1765.txt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
```release-note:new-data-source
2+
tencentcloud_sqlserver_backup_commands
3+
```
4+
5+
```release-note:new-resource
6+
tencentcloud_sqlserver_general_backup
7+
```
8+
9+
```release-note:new-resource
10+
tencentcloud_sqlserver_general_clone
11+
```

examples/tencentcloud-sqlserver/main.tf

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,16 @@ resource "tencentcloud_sqlserver_publish_subscribe" "example" {
110110
}
111111
}
112112

113+
resource "tencentcloud_sqlserver_general_backup" "test_sqlserver_backup" {
114+
instance_id = "mssql-qelbzgwf"
115+
backup_name = "create_backup"
116+
}
117+
118+
resource "tencentcloud_sqlserver_general_clone" "general_clone" {
119+
instance_id = "mssql-qelbzgwf"
120+
old_name = "keep_pubsub_db"
121+
new_name = "keep_pubsub_db_new_name"
122+
}
113123

114124
data "tencentcloud_sqlserver_instances" "id_example" {
115125
id = tencentcloud_sqlserver_instance.example.id

tencentcloud/data_source_tc_mysql_backup_list.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ Example Usage
55
66
```hcl
77
data "tencentcloud_mysql_backup_list" "default" {
8-
mysql_id = "my-test-database"
8+
mysql_id = "terraform-test-local-database"
99
max_number = 10
1010
result_output_file = "mytestpath"
1111
}

tencentcloud/data_source_tc_mysql_instance.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ Example Usage
55
66
```hcl
77
data "tencentcloud_mysql_instance" "database" {
8-
mysql_id = "my-test-database"
8+
mysql_id = "terraform-test-local-database"
99
result_output_file = "mytestpath"
1010
}
1111
```

tencentcloud/data_source_tc_mysql_parameter_list.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ Example Usage
55
66
```hcl
77
data "tencentcloud_mysql_parameter_list" "mysql" {
8-
mysql_id = "my-test-database"
8+
mysql_id = "terraform-test-local-database"
99
engine_version = "5.5"
1010
result_output_file = "mytestpath"
1111
}
Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
/*
2+
Use this data source to query detailed information of sqlserver datasource_backup_command
3+
4+
Example Usage
5+
6+
```hcl
7+
data "tencentcloud_sqlserver_backup_commands" "backup_command" {
8+
backup_file_type = "FULL"
9+
data_base_name = "db_name"
10+
is_recovery = "No"
11+
local_path = ""
12+
}
13+
```
14+
*/
15+
package tencentcloud
16+
17+
import (
18+
"context"
19+
"fmt"
20+
"log"
21+
22+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
23+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
24+
sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328"
25+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
26+
)
27+
28+
func dataSourceTencentCloudSqlserverBackupCommands() *schema.Resource {
29+
return &schema.Resource{
30+
Read: dataSourceTencentCloudSqlserverBackupCommandsRead,
31+
Schema: map[string]*schema.Schema{
32+
"backup_file_type": {
33+
Required: true,
34+
Type: schema.TypeString,
35+
Description: "Backup file type. Full: full backup. FULL_LOG: full backup which needs log increments. FULL_DIFF: full backup which needs differential increments. LOG: log backup. DIFF: differential backup.",
36+
},
37+
"data_base_name": {
38+
Required: true,
39+
Type: schema.TypeString,
40+
Description: "Database name.",
41+
},
42+
"is_recovery": {
43+
Required: true,
44+
Type: schema.TypeString,
45+
Description: "Whether restoration is required. No: not required. Yes: required.",
46+
},
47+
"local_path": {
48+
Optional: true,
49+
Type: schema.TypeString,
50+
Description: "Storage path of backup files. If this parameter is left empty, the default storage path will be D:.",
51+
},
52+
"result_output_file": {
53+
Type: schema.TypeString,
54+
Optional: true,
55+
Description: "Used to save results.",
56+
},
57+
"list": {
58+
Type: schema.TypeList,
59+
Computed: true,
60+
Description: "Command list.",
61+
Elem: &schema.Resource{
62+
Schema: map[string]*schema.Schema{
63+
"command": {
64+
Type: schema.TypeString,
65+
Computed: true,
66+
Description: "Create backup command.",
67+
},
68+
"request_id": {
69+
Type: schema.TypeString,
70+
Computed: true,
71+
Description: "Request ID.",
72+
},
73+
},
74+
},
75+
},
76+
},
77+
}
78+
}
79+
80+
func dataSourceTencentCloudSqlserverBackupCommandsRead(d *schema.ResourceData, meta interface{}) error {
81+
defer logElapsed("data_source.tencentcloud_sqlserver_backup_commands.read")()
82+
defer inconsistentCheck(d, meta)()
83+
84+
var (
85+
logId = getLogId(contextNil)
86+
ctx = context.WithValue(context.TODO(), logIdKey, logId)
87+
command []*sqlserver.DescribeBackupCommandResponseParams
88+
)
89+
90+
paramMap := make(map[string]interface{})
91+
if v, ok := d.GetOk("backup_file_type"); ok {
92+
paramMap["BackupFileType"] = helper.String(v.(string))
93+
}
94+
95+
if v, ok := d.GetOk("data_base_name"); ok {
96+
paramMap["DataBaseName"] = helper.String(v.(string))
97+
}
98+
99+
if v, ok := d.GetOk("is_recovery"); ok {
100+
paramMap["IsRecovery"] = helper.String(v.(string))
101+
}
102+
103+
if v, ok := d.GetOk("local_path"); ok {
104+
paramMap["LocalPath"] = helper.String(v.(string))
105+
}
106+
107+
service := SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn}
108+
109+
err := resource.Retry(readRetryTimeout, func() *resource.RetryError {
110+
result, err := service.DescribeSqlserverBackupCommand(ctx, paramMap)
111+
if err != nil {
112+
return retryError(err)
113+
}
114+
115+
command = result
116+
return nil
117+
})
118+
119+
if err != nil {
120+
return err
121+
}
122+
123+
var list []map[string]interface{}
124+
var ids = make([]string, len(command))
125+
for _, item := range command {
126+
mapping := map[string]interface{}{
127+
"command": item.Command,
128+
"request_id": item.RequestId,
129+
}
130+
list = append(list, mapping)
131+
ids = append(ids, fmt.Sprintf("%s%s", *item.Command, *item.RequestId))
132+
}
133+
134+
d.SetId(helper.DataResourceIdsHash(ids))
135+
if e := d.Set("list", list); e != nil {
136+
log.Printf("[CRITAL]%s provider set list fail, reason:%s\n", logId, e.Error())
137+
return e
138+
}
139+
140+
output, ok := d.GetOk("result_output_file")
141+
if ok && output.(string) != "" {
142+
if e := writeToFile(output.(string), command); e != nil {
143+
return e
144+
}
145+
}
146+
147+
return nil
148+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package tencentcloud
2+
3+
import (
4+
"testing"
5+
6+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
7+
)
8+
9+
// go test -i; go test -test.run TestAccTencentCloudSqlserverBackupCommands_basic -v
10+
func TestAccTencentCloudSqlserverBackupCommands_basic(t *testing.T) {
11+
t.Parallel()
12+
resource.Test(t, resource.TestCase{
13+
PreCheck: func() {
14+
testAccPreCheck(t)
15+
},
16+
Providers: testAccProviders,
17+
Steps: []resource.TestStep{
18+
{
19+
Config: testAccSqlserverBackupCommands,
20+
Check: resource.ComposeTestCheckFunc(
21+
resource.TestCheckResourceAttrSet("data.tencentcloud_sqlserver_backup_commands.backup_command", "list.#"),
22+
),
23+
},
24+
},
25+
})
26+
}
27+
28+
const testAccSqlserverBackupCommands = `
29+
data "tencentcloud_sqlserver_backup_commands" "backup_command" {
30+
backup_file_type = "FULL"
31+
data_base_name = "keep-publish-instance"
32+
is_recovery = "NO"
33+
local_path = ""
34+
}
35+
`

tencentcloud/extension_sqlserver.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,18 @@ const (
121121
SQLSERVER_MIGRATION_TERMINATED = 8
122122
)
123123

124+
const (
125+
SQLSERVER_BACKUP_RUNNING = 0
126+
SQLSERVER_BACKUP_SUCCESS = 1
127+
SQLSERVER_BACKUP_FAIL = 2
128+
)
129+
130+
const (
131+
SQLSERVER_CLONE_SUCCESS = 0
132+
SQLSERVER_CLONE_FAIL = 1
133+
SQLSERVER_CLONE_RUNNING = 2
134+
)
135+
124136
var SQLSERVER_MIGRATION_STATUS = map[int64]string{
125137
SQLSERVER_MIGRATION_INIT: "init",
126138
SQLSERVER_MIGRATION_MIGRATING: "migrating",

tencentcloud/provider.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -586,6 +586,7 @@ SQLServer
586586
tencentcloud_sqlserver_readonly_groups
587587
tencentcloud_sqlserver_publish_subscribes
588588
tencentcloud_sqlserver_basic_instances
589+
tencentcloud_sqlserver_backup_commands
589590
590591
Resource
591592
tencentcloud_sqlserver_instance
@@ -597,6 +598,8 @@ SQLServer
597598
tencentcloud_sqlserver_basic_instance
598599
tencentcloud_sqlserver_migration
599600
tencentcloud_sqlserver_config_backup_strategy
601+
tencentcloud_sqlserver_general_backup
602+
tencentcloud_sqlserver_general_clone
600603
601604
SSL Certificates
602605
Data Source
@@ -1424,6 +1427,7 @@ func Provider() *schema.Provider {
14241427
"tencentcloud_sqlserver_accounts": dataSourceTencentCloudSqlserverAccounts(),
14251428
"tencentcloud_sqlserver_account_db_attachments": dataSourceTencentCloudSqlserverAccountDBAttachments(),
14261429
"tencentcloud_sqlserver_readonly_groups": dataSourceTencentCloudSqlserverReadonlyGroups(),
1430+
"tencentcloud_sqlserver_backup_commands": dataSourceTencentCloudSqlserverBackupCommands(),
14271431
"tencentcloud_ckafka_users": dataSourceTencentCloudCkafkaUsers(),
14281432
"tencentcloud_ckafka_acls": dataSourceTencentCloudCkafkaAcls(),
14291433
"tencentcloud_ckafka_topics": dataSourceTencentCloudCkafkaTopics(),
@@ -1799,6 +1803,8 @@ func Provider() *schema.Provider {
17991803
"tencentcloud_sqlserver_readonly_instance": resourceTencentCloudSqlserverReadonlyInstance(),
18001804
"tencentcloud_sqlserver_migration": resourceTencentCloudSqlserverMigration(),
18011805
"tencentcloud_sqlserver_config_backup_strategy": resourceTencentCloudSqlserverConfigBackupStrategy(),
1806+
"tencentcloud_sqlserver_general_backup": resourceTencentCloudSqlserverGeneralBackup(),
1807+
"tencentcloud_sqlserver_general_clone": resourceTencentCloudSqlserverGeneralClone(),
18021808
"tencentcloud_ckafka_instance": resourceTencentCloudCkafkaInstance(),
18031809
"tencentcloud_ckafka_user": resourceTencentCloudCkafkaUser(),
18041810
"tencentcloud_ckafka_acl": resourceTencentCloudCkafkaAcl(),

tencentcloud/resource_tc_api_gateway_api_doc.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ func resourceTencentCloudAPIGatewayAPIDocCreate(d *schema.ResourceData, meta int
179179
return nil
180180
}
181181
if *apiDocInfo.ApiDocStatus == API_GATEWAY_API_DOC_STATUS_FAIL {
182-
return resource.NonRetryableError(fmt.Errorf("create api_doc task status is %s", API_GATEWAY_API_DOC_STATUS_PROCESSING))
182+
return resource.NonRetryableError(fmt.Errorf("create api_doc task status is %s", API_GATEWAY_API_DOC_STATUS_FAIL))
183183
}
184184
err = fmt.Errorf("create api_doc task status is %v, we won't wait for it finish", *apiDocInfo.ApiDocStatus)
185185
return resource.NonRetryableError(err)

0 commit comments

Comments
 (0)