Skip to content

Commit 00d02fc

Browse files
authored
Feat/support sqlserver resource (#1678)
* feat:support tencentcloud_tcr_tag_retention_rule resource * add changelog * adjust e2e case for tcr repo and retention rule * support resource: tencentcloud_sqlserver_config_backup_strategy * add changelog * adjust the update method without hasChange
1 parent ebced9b commit 00d02fc

File tree

7 files changed

+653
-0
lines changed

7 files changed

+653
-0
lines changed

.changelog/1678.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:new-resource
2+
tencentcloud_sqlserver_config_backup_strategy
3+
```

tencentcloud/provider.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -582,6 +582,7 @@ SQLServer
582582
tencentcloud_sqlserver_publish_subscribe
583583
tencentcloud_sqlserver_basic_instance
584584
tencentcloud_sqlserver_migration
585+
tencentcloud_sqlserver_config_backup_strategy
585586
586587
SSL Certificates
587588
Data Source
@@ -1667,6 +1668,7 @@ func Provider() terraform.ResourceProvider {
16671668
"tencentcloud_sqlserver_account_db_attachment": resourceTencentCloudSqlserverAccountDBAttachment(),
16681669
"tencentcloud_sqlserver_readonly_instance": resourceTencentCloudSqlserverReadonlyInstance(),
16691670
"tencentcloud_sqlserver_migration": resourceTencentCloudSqlserverMigration(),
1671+
"tencentcloud_sqlserver_config_backup_strategy": resourceTencentCloudSqlserverConfigBackupStrategy(),
16701672
"tencentcloud_ckafka_instance": resourceTencentCloudCkafkaInstance(),
16711673
"tencentcloud_ckafka_user": resourceTencentCloudCkafkaUser(),
16721674
"tencentcloud_ckafka_acl": resourceTencentCloudCkafkaAcl(),
Lines changed: 351 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,351 @@
1+
/*
2+
Provides a resource to create a sqlserver config_backup_strategy
3+
4+
Example Usage
5+
6+
Daily backup
7+
8+
```hcl
9+
resource "tencentcloud_sqlserver_config_backup_strategy" "config" {
10+
instance_id = local.sqlserver_id
11+
backup_type = "daily"
12+
backup_time = 0
13+
backup_day = 1
14+
backup_model = "master_no_pkg"
15+
backup_cycle = [1]
16+
backup_save_days = 7
17+
regular_backup_enable = "disable"
18+
regular_backup_save_days = 90
19+
regular_backup_strategy = "months"
20+
regular_backup_counts = 1
21+
}
22+
```
23+
24+
Weekly backup
25+
26+
```hcl
27+
resource "tencentcloud_sqlserver_config_backup_strategy" "config" {
28+
instance_id = local.sqlserver_id
29+
backup_type = "weekly"
30+
backup_time = 0
31+
backup_day = 1
32+
backup_model = "master_no_pkg"
33+
backup_cycle = [1,3,5]
34+
backup_save_days = 7
35+
regular_backup_enable = "disable"
36+
regular_backup_save_days = 90
37+
regular_backup_strategy = "months"
38+
regular_backup_counts = 1
39+
}
40+
```
41+
42+
Regular backup
43+
44+
```hcl
45+
resource "tencentcloud_sqlserver_config_backup_strategy" "config" {
46+
instance_id = local.sqlserver_id
47+
backup_type = "weekly"
48+
backup_time = 0
49+
backup_day = 1
50+
backup_model = "master_no_pkg"
51+
backup_cycle = [1,3]
52+
backup_save_days = 7
53+
regular_backup_enable = "enable"
54+
regular_backup_save_days = 120
55+
regular_backup_strategy = "months"
56+
regular_backup_counts = 1
57+
regular_backup_start_time = "%s"
58+
}
59+
```
60+
61+
Import
62+
63+
sqlserver config_backup_strategy can be imported using the id, e.g.
64+
65+
```
66+
terraform import tencentcloud_sqlserver_config_backup_strategy.config_backup_strategy config_backup_strategy_id
67+
```
68+
*/
69+
package tencentcloud
70+
71+
import (
72+
"context"
73+
"log"
74+
75+
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
76+
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
77+
sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328"
78+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
79+
)
80+
81+
func resourceTencentCloudSqlserverConfigBackupStrategy() *schema.Resource {
82+
return &schema.Resource{
83+
Create: resourceTencentCloudSqlserverConfigBackupStrategyCreate,
84+
Read: resourceTencentCloudSqlserverConfigBackupStrategyRead,
85+
Update: resourceTencentCloudSqlserverConfigBackupStrategyUpdate,
86+
Delete: resourceTencentCloudSqlserverConfigBackupStrategyDelete,
87+
Importer: &schema.ResourceImporter{
88+
State: schema.ImportStatePassthrough,
89+
},
90+
Schema: map[string]*schema.Schema{
91+
"instance_id": {
92+
Required: true,
93+
Type: schema.TypeString,
94+
Description: "Instance ID.",
95+
},
96+
97+
"backup_type": {
98+
Optional: true,
99+
Type: schema.TypeString,
100+
Description: "Backup type. Valid values: weekly (when length(BackupDay) <=7 && length(BackupDay) >=2), daily (when length(BackupDay)=1). Default value: daily.",
101+
},
102+
103+
"backup_time": {
104+
Optional: true,
105+
Type: schema.TypeInt,
106+
Description: "Backup time. Value range: an integer from 0 to 23.",
107+
},
108+
109+
"backup_day": {
110+
Optional: true,
111+
Type: schema.TypeInt,
112+
Description: "Backup interval in days when the BackupType is daily. Valid value: 1.",
113+
},
114+
115+
"backup_model": {
116+
Optional: true,
117+
Type: schema.TypeString,
118+
Description: "Backup mode. Valid values: master_pkg (archive the backup files of the primary node), master_no_pkg (do not archive the backup files of the primary node), slave_pkg (archive the backup files of the replica node), slave_no_pkg (do not archive the backup files of the replica node). Backup files of the replica node are supported only when Always On disaster recovery is enabled.",
119+
},
120+
121+
"backup_cycle": {
122+
Optional: true,
123+
Type: schema.TypeSet,
124+
Elem: &schema.Schema{
125+
Type: schema.TypeInt,
126+
},
127+
Description: "The days of the week on which backup will be performed when `BackupType` is weekly. If data backup retention period is less than 7 days, the values will be 1-7, indicating that backup will be performed everyday by default; if data backup retention period is greater than or equal to 7 days, the values will be at least any two days, indicating that backup will be performed at least twice in a week by default.",
128+
},
129+
130+
"backup_save_days": {
131+
Optional: true,
132+
Type: schema.TypeInt,
133+
Description: "Data (log) backup retention period. Value range: 3-1830 days, default value: 7 days.",
134+
},
135+
136+
"regular_backup_enable": {
137+
Optional: true,
138+
Type: schema.TypeString,
139+
Description: "Archive backup status. Valid values: enable (enabled); disable (disabled). Default value: disable.",
140+
},
141+
142+
"regular_backup_save_days": {
143+
Optional: true,
144+
Type: schema.TypeInt,
145+
Description: "Archive backup retention days. Value range: 90-3650 days. Default value: 365 days.",
146+
},
147+
148+
"regular_backup_strategy": {
149+
Optional: true,
150+
Type: schema.TypeString,
151+
Description: "Archive backup policy. Valid values: years (yearly); quarters (quarterly); months(monthly); Default value: `months`.",
152+
},
153+
154+
"regular_backup_counts": {
155+
Optional: true,
156+
Type: schema.TypeInt,
157+
Description: "The number of retained archive backups. Default value: 1.",
158+
},
159+
160+
"regular_backup_start_time": {
161+
Optional: true,
162+
Type: schema.TypeString,
163+
Description: "Archive backup start date in YYYY-MM-DD format, which is the current time by default.",
164+
},
165+
},
166+
}
167+
}
168+
169+
func resourceTencentCloudSqlserverConfigBackupStrategyCreate(d *schema.ResourceData, meta interface{}) error {
170+
defer logElapsed("resource.tencentcloud_sqlserver_config_backup_strategy.create")()
171+
defer inconsistentCheck(d, meta)()
172+
173+
var instanceId string
174+
if v, ok := d.GetOk("instance_id"); ok {
175+
instanceId = v.(string)
176+
}
177+
178+
d.SetId(instanceId)
179+
180+
return resourceTencentCloudSqlserverConfigBackupStrategyUpdate(d, meta)
181+
}
182+
183+
func resourceTencentCloudSqlserverConfigBackupStrategyRead(d *schema.ResourceData, meta interface{}) error {
184+
defer logElapsed("resource.tencentcloud_sqlserver_config_backup_strategy.read")()
185+
defer inconsistentCheck(d, meta)()
186+
187+
logId := getLogId(contextNil)
188+
189+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
190+
191+
service := SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn}
192+
193+
instanceId := d.Id()
194+
195+
configBackupStrategy, err := service.DescribeSqlserverConfigBackupStrategyById(ctx, instanceId)
196+
if err != nil {
197+
return err
198+
}
199+
200+
if configBackupStrategy == nil {
201+
d.SetId("")
202+
log.Printf("[WARN]%s resource `SqlserverConfigBackupStrategy` [%s] not found, please check if it has been deleted.\n", logId, d.Id())
203+
return nil
204+
}
205+
206+
if configBackupStrategy.InstanceId != nil {
207+
_ = d.Set("instance_id", configBackupStrategy.InstanceId)
208+
}
209+
210+
if configBackupStrategy.BackupCycleType != nil {
211+
_ = d.Set("backup_type", configBackupStrategy.BackupCycleType)
212+
}
213+
214+
if configBackupStrategy.BackupTime != nil {
215+
_ = d.Set("backup_time", configBackupStrategy.BackupTime)
216+
}
217+
218+
if configBackupStrategy.BackupTime != nil {
219+
_ = d.Set("backup_day", configBackupStrategy.BackupTime)
220+
}
221+
222+
if configBackupStrategy.BackupModel != nil {
223+
_ = d.Set("backup_model", configBackupStrategy.BackupModel)
224+
}
225+
226+
if configBackupStrategy.BackupCycle != nil {
227+
_ = d.Set("backup_cycle", configBackupStrategy.BackupCycle)
228+
}
229+
230+
if configBackupStrategy.BackupSaveDays != nil {
231+
_ = d.Set("backup_save_days", configBackupStrategy.BackupSaveDays)
232+
}
233+
234+
// if configBackupStrategy.RegularBackupEnable != nil {
235+
// _ = d.Set("regular_backup_enable", configBackupStrategy.RegularBackupEnable)
236+
// }
237+
238+
// if configBackupStrategy.RegularBackupSaveDays != nil {
239+
// _ = d.Set("regular_backup_save_days", configBackupStrategy.RegularBackupSaveDays)
240+
// }
241+
242+
// if configBackupStrategy.RegularBackupStrategy != nil {
243+
// _ = d.Set("regular_backup_strategy", configBackupStrategy.RegularBackupStrategy)
244+
// }
245+
246+
// if configBackupStrategy.RegularBackupCounts != nil {
247+
// _ = d.Set("regular_backup_counts", configBackupStrategy.RegularBackupCounts)
248+
// }
249+
250+
// if configBackupStrategy.RegularBackupStartTime != nil {
251+
// _ = d.Set("regular_backup_start_time", configBackupStrategy.RegularBackupStartTime)
252+
// }
253+
254+
return nil
255+
}
256+
257+
func resourceTencentCloudSqlserverConfigBackupStrategyUpdate(d *schema.ResourceData, meta interface{}) error {
258+
defer logElapsed("resource.tencentcloud_sqlserver_config_backup_strategy.update")()
259+
defer inconsistentCheck(d, meta)()
260+
261+
logId := getLogId(contextNil)
262+
263+
request := sqlserver.NewModifyBackupStrategyRequest()
264+
265+
needChange := false
266+
267+
request.InstanceId = helper.String(d.Id())
268+
269+
mutableArgs := []string{"backup_type", "backup_time", "backup_day", "backup_model", "backup_cycle", "backup_save_days", "regular_backup_enable", "regular_backup_save_days", "regular_backup_strategy", "regular_backup_counts", "regular_backup_start_time"}
270+
271+
for _, v := range mutableArgs {
272+
if d.HasChange(v) {
273+
needChange = true
274+
break
275+
}
276+
}
277+
278+
if needChange {
279+
280+
if v, ok := d.GetOk("backup_type"); ok {
281+
request.BackupType = helper.String(v.(string))
282+
}
283+
284+
if v, ok := d.GetOk("backup_model"); ok {
285+
request.BackupModel = helper.String(v.(string))
286+
}
287+
288+
if v, ok := d.GetOkExists("backup_time"); ok {
289+
request.BackupTime = helper.IntUint64(v.(int))
290+
}
291+
292+
if v, ok := d.GetOkExists("backup_day"); ok {
293+
request.BackupDay = helper.IntUint64(v.(int))
294+
}
295+
296+
if v, ok := d.GetOk("backup_cycle"); ok {
297+
backupCycleSet := v.(*schema.Set).List()
298+
for i := range backupCycleSet {
299+
backupCycle := backupCycleSet[i].(int)
300+
request.BackupCycle = append(request.BackupCycle, helper.IntUint64(backupCycle))
301+
}
302+
}
303+
304+
if v, ok := d.GetOkExists("backup_save_days"); ok {
305+
request.BackupSaveDays = helper.IntUint64(v.(int))
306+
}
307+
308+
if v, ok := d.GetOk("regular_backup_enable"); ok {
309+
request.RegularBackupEnable = helper.String(v.(string))
310+
}
311+
312+
if v, ok := d.GetOkExists("regular_backup_save_days"); ok {
313+
request.RegularBackupSaveDays = helper.IntUint64(v.(int))
314+
}
315+
316+
if v, ok := d.GetOk("regular_backup_strategy"); ok {
317+
request.RegularBackupStrategy = helper.String(v.(string))
318+
}
319+
320+
if v, ok := d.GetOkExists("regular_backup_counts"); ok {
321+
request.RegularBackupCounts = helper.IntUint64(v.(int))
322+
}
323+
324+
if v, ok := d.GetOk("regular_backup_start_time"); ok {
325+
request.RegularBackupStartTime = helper.String(v.(string))
326+
}
327+
328+
err := resource.Retry(writeRetryTimeout, func() *resource.RetryError {
329+
result, e := meta.(*TencentCloudClient).apiV3Conn.UseSqlserverClient().ModifyBackupStrategy(request)
330+
if e != nil {
331+
return retryError(e)
332+
} else {
333+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
334+
}
335+
return nil
336+
})
337+
if err != nil {
338+
log.Printf("[CRITAL]%s update sqlserver configBackupStrategy failed, reason:%+v", logId, err)
339+
return err
340+
}
341+
}
342+
343+
return resourceTencentCloudSqlserverConfigBackupStrategyRead(d, meta)
344+
}
345+
346+
func resourceTencentCloudSqlserverConfigBackupStrategyDelete(d *schema.ResourceData, meta interface{}) error {
347+
defer logElapsed("resource.tencentcloud_sqlserver_config_backup_strategy.delete")()
348+
defer inconsistentCheck(d, meta)()
349+
350+
return nil
351+
}

0 commit comments

Comments
 (0)