Skip to content

Commit e79e5cc

Browse files
authored
Merge pull request #2098 from tencentcloudstack/feat/clickhouse-backup
support clickhouse backup
2 parents d4c3f86 + ca055cb commit e79e5cc

26 files changed

+2352
-3
lines changed

.changelog/2098.txt

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
```release-note:new-data-source
2+
tencentcloud_clickhouse_backup_jobs
3+
```
4+
5+
```release-note:new-data-source
6+
tencentcloud_clickhouse_backup_job_detail
7+
```
8+
9+
```release-note:new-resource
10+
tencentcloud_clickhouse_backup
11+
```
12+
13+
```release-note:new-resource
14+
tencentcloud_clickhouse_backup_strategy
15+
```
16+
17+
```release-note:new-resource
18+
tencentcloud_clickhouse_recover_backup_job
19+
```
20+
21+
```release-note:new-resource
22+
tencentcloud_clickhouse_delete_backup_data
23+
```

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ require (
3434
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cbs v1.0.591
3535
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb v1.0.699
3636
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdn v1.0.539
37-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdwch v1.0.698
37+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdwch v1.0.736
3838
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfs v1.0.627
3939
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/chdfs v1.0.600
4040
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ciam v1.0.695

go.sum

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -800,6 +800,10 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdn v1.0.539 h1:0L6nZhT
800800
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdn v1.0.539/go.mod h1:6Syk7W5fdDf0BLvX+RXL5obQ6unkt3Id4aN2QqVrV6U=
801801
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdwch v1.0.698 h1:KB6LWRcQ9x8pnQ46dJ6hMFr0isNnjljNKYVpNfFfwso=
802802
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdwch v1.0.698/go.mod h1:QYtc8Z/v5lGpY7fq4YefsWPcQ71qBdoiTu0P97vrNTw=
803+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdwch v1.0.734 h1:lLaTMaf49VZ4Bk1gSHmQeWjzgBB5PupUAQ1bkDhyWPE=
804+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdwch v1.0.734/go.mod h1:b8mkJ06Xxqqiyb42/FTj71YyZ60Gt0zvlbtwbpMF7gY=
805+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdwch v1.0.736 h1:N6++C79PcOe3yAnjFwaoXwcd8jFT3Jqr0c60QeVtPRA=
806+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdwch v1.0.736/go.mod h1:Lz8ow6ykZFxoC3IbpLd7IdPMLaa9yFAMF0TuLkIVj2U=
803807
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfs v1.0.627 h1:nChNdoCUWQZciiJj3gRCWoHBO/8LituLQOdCRREIrS4=
804808
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfs v1.0.627/go.mod h1:lr3IyWgJk4rLWr0vVd8J1Tfs5O+wNcwSZ9ciMhGUrlI=
805809
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/chdfs v1.0.600 h1:qSpp4rEgAzfXhi1rPxes+AJp2mwnsyRGPY/Km1FuYGs=
Lines changed: 175 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,175 @@
1+
/*
2+
Use this data source to query detailed information of clickhouse backup job detail
3+
4+
Example Usage
5+
6+
```hcl
7+
data "tencentcloud_clickhouse_backup_job_detail" "backup_job_detail" {
8+
instance_id = "cdwch-xxxxxx"
9+
back_up_job_id = 1234
10+
}
11+
```
12+
*/
13+
package tencentcloud
14+
15+
import (
16+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
17+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
18+
clickhouse "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdwch/v20200915"
19+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
20+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit"
21+
)
22+
23+
func dataSourceTencentCloudClickhouseBackupJobDetail() *schema.Resource {
24+
return &schema.Resource{
25+
Read: dataSourceTencentCloudClickhouseBackupJobDetailRead,
26+
Schema: map[string]*schema.Schema{
27+
"instance_id": {
28+
Required: true,
29+
Type: schema.TypeString,
30+
Description: "Instance id.",
31+
},
32+
33+
"back_up_job_id": {
34+
Required: true,
35+
Type: schema.TypeInt,
36+
Description: "Back up job id.",
37+
},
38+
39+
"table_contents": {
40+
Computed: true,
41+
Type: schema.TypeList,
42+
Description: "Back up tables.",
43+
Elem: &schema.Resource{
44+
Schema: map[string]*schema.Schema{
45+
"database": {
46+
Type: schema.TypeString,
47+
Computed: true,
48+
Description: "Database.",
49+
},
50+
"table": {
51+
Type: schema.TypeString,
52+
Computed: true,
53+
Description: "Table.",
54+
},
55+
"total_bytes": {
56+
Type: schema.TypeInt,
57+
Computed: true,
58+
Description: "Total bytes.",
59+
},
60+
"v_cluster": {
61+
Type: schema.TypeString,
62+
Computed: true,
63+
Description: "Virtual cluster.",
64+
},
65+
"ips": {
66+
Type: schema.TypeString,
67+
Computed: true,
68+
Description: "Ips.",
69+
},
70+
"zoo_path": {
71+
Type: schema.TypeString,
72+
Computed: true,
73+
Description: "ZK path.",
74+
},
75+
"rip": {
76+
Type: schema.TypeString,
77+
Computed: true,
78+
Description: "Ip address of cvm.",
79+
},
80+
},
81+
},
82+
},
83+
84+
"result_output_file": {
85+
Type: schema.TypeString,
86+
Optional: true,
87+
Description: "Used to save results.",
88+
},
89+
},
90+
}
91+
}
92+
93+
func dataSourceTencentCloudClickhouseBackupJobDetailRead(d *schema.ResourceData, meta interface{}) error {
94+
defer logElapsed("data_source.tencentcloud_clickhouse_backup_job_detail.read")()
95+
defer inconsistentCheck(d, meta)()
96+
97+
var (
98+
request = clickhouse.NewDescribeBackUpJobDetailRequest()
99+
instanceId string
100+
backUpJobId int
101+
)
102+
if v, ok := d.GetOk("instance_id"); ok {
103+
instanceId = v.(string)
104+
request.InstanceId = helper.String(instanceId)
105+
}
106+
107+
if v, _ := d.GetOk("back_up_job_id"); v != nil {
108+
backUpJobId = v.(int)
109+
request.BackUpJobId = helper.IntInt64(backUpJobId)
110+
}
111+
112+
var tableContents []*clickhouse.BackupTableContent
113+
114+
err := resource.Retry(readRetryTimeout, func() *resource.RetryError {
115+
ratelimit.Check(request.GetAction())
116+
response, e := meta.(*TencentCloudClient).apiV3Conn.UseCdwchClient().DescribeBackUpJobDetail(request)
117+
if e != nil {
118+
return retryError(e)
119+
}
120+
tableContents = response.Response.TableContents
121+
return nil
122+
})
123+
if err != nil {
124+
return err
125+
}
126+
127+
tmpList := make([]map[string]interface{}, 0, len(tableContents))
128+
129+
if tableContents != nil {
130+
for _, backupTableContent := range tableContents {
131+
backupTableContentMap := map[string]interface{}{}
132+
133+
if backupTableContent.Database != nil {
134+
backupTableContentMap["database"] = backupTableContent.Database
135+
}
136+
137+
if backupTableContent.Table != nil {
138+
backupTableContentMap["table"] = backupTableContent.Table
139+
}
140+
141+
if backupTableContent.TotalBytes != nil {
142+
backupTableContentMap["total_bytes"] = backupTableContent.TotalBytes
143+
}
144+
145+
if backupTableContent.VCluster != nil {
146+
backupTableContentMap["v_cluster"] = backupTableContent.VCluster
147+
}
148+
149+
if backupTableContent.Ips != nil {
150+
backupTableContentMap["ips"] = backupTableContent.Ips
151+
}
152+
153+
if backupTableContent.ZooPath != nil {
154+
backupTableContentMap["zoo_path"] = backupTableContent.ZooPath
155+
}
156+
157+
if backupTableContent.Rip != nil {
158+
backupTableContentMap["rip"] = backupTableContent.Rip
159+
}
160+
161+
tmpList = append(tmpList, backupTableContentMap)
162+
}
163+
164+
_ = d.Set("table_contents", tmpList)
165+
}
166+
167+
d.SetId(instanceId + helper.IntToStr(backUpJobId))
168+
output, ok := d.GetOk("result_output_file")
169+
if ok && output.(string) != "" {
170+
if e := writeToFile(output.(string), tmpList); e != nil {
171+
return e
172+
}
173+
}
174+
return nil
175+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package tencentcloud
2+
3+
import (
4+
"testing"
5+
6+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
7+
)
8+
9+
func TestAccTencentCloudClickhouseBackupJobDetailDataSource_basic(t *testing.T) {
10+
resource.Test(t, resource.TestCase{
11+
PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) },
12+
Providers: testAccProviders,
13+
Steps: []resource.TestStep{
14+
{
15+
Config: testAccClickhouseBackupJobDetailDataSource,
16+
Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_clickhouse_backup_job_detail.backup_job_detail")),
17+
},
18+
},
19+
})
20+
}
21+
22+
const testAccClickhouseBackupJobDetailDataSource = `
23+
resource "tencentcloud_clickhouse_backup" "backup" {
24+
instance_id = "cdwch-pcap78rz"
25+
cos_bucket_name = "keep-export-image-1308726196"
26+
}
27+
28+
data "tencentcloud_clickhouse_backup_job_detail" "backup_job_detail" {
29+
instance_id = "cdwch-pcap78rz"
30+
back_up_job_id = 7679
31+
}
32+
`

0 commit comments

Comments
 (0)