Skip to content

Commit 91a8c8b

Browse files
author
mikatong
committed
support clickhouse backup
1 parent d4c3f86 commit 91a8c8b

File tree

11 files changed

+814
-2
lines changed

11 files changed

+814
-2
lines changed

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.734
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: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -800,6 +800,8 @@ 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=
803805
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfs v1.0.627 h1:nChNdoCUWQZciiJj3gRCWoHBO/8LituLQOdCRREIrS4=
804806
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfs v1.0.627/go.mod h1:lr3IyWgJk4rLWr0vVd8J1Tfs5O+wNcwSZ9ciMhGUrlI=
805807
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/chdfs v1.0.600 h1:qSpp4rEgAzfXhi1rPxes+AJp2mwnsyRGPY/Km1FuYGs=

tencentcloud/extension_cdwch.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,16 @@ const (
1515
NODE_TYPE_ZOOKEEPER = "COMMON"
1616
)
1717

18+
const (
19+
OPERATION_TYPE_CREATE = "create"
20+
OPERATION_TYPE_UPDATE = "update"
21+
)
22+
23+
const (
24+
SCHEDULE_TYPE_DATA = "data"
25+
SCHEDULE_TYPE_META = "meta"
26+
)
27+
1828
var PAY_MODE_TO_CHARGE_TYPE = map[string]string{
1929
CDWCH_PAY_MODE_HOUR: CDWCH_CHARGE_TYPE_POSTPAID_BY_HOUR,
2030
CDWCH_PAY_MODE_PREPAY: CDWCH_CHARGE_TYPE_PREPAID,

tencentcloud/provider.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2965,6 +2965,8 @@ func Provider() *schema.Provider {
29652965
"tencentcloud_lighthouse_disk": resourceTencentCloudLighthouseDisk(),
29662966
"tencentcloud_lighthouse_renew_disk": resourceTencentCloudLighthouseRenewDisk(),
29672967
"tencentcloud_lighthouse_renew_instance": resourceTencentCloudLighthouseRenewInstance(),
2968+
"tencentcloud_clickhouse_backup": resourceTencentCloudClickhouseBackup(),
2969+
"tencentcloud_clickhouse_backup_strategy": resourceTencentCloudClickhouseBackupStrategy(),
29682970
"tencentcloud_api_gateway_api_doc": resourceTencentCloudAPIGatewayAPIDoc(),
29692971
"tencentcloud_api_gateway_api_app": resourceTencentCloudAPIGatewayAPIApp(),
29702972
"tencentcloud_tse_instance": resourceTencentCloudTseInstance(),
Lines changed: 171 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,171 @@
1+
/*
2+
Provides a resource to open clickhouse backup
3+
4+
Example Usage
5+
6+
```hcl
7+
resource "tencentcloud_clickhouse_backup" "backup" {
8+
instance_id = "cdwch-xxxxxx"
9+
cos_bucket_name = "xxxxxx"
10+
}
11+
```
12+
13+
Import
14+
15+
clickhouse backup can be imported using the id, e.g.
16+
17+
```
18+
terraform import tencentcloud_clickhouse_backup.backup instance_id
19+
```
20+
*/
21+
package tencentcloud
22+
23+
import (
24+
"context"
25+
"fmt"
26+
"log"
27+
28+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
29+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
30+
clickhouse "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdwch/v20200915"
31+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
32+
)
33+
34+
func resourceTencentCloudClickhouseBackup() *schema.Resource {
35+
return &schema.Resource{
36+
Create: resourceTencentCloudClickhouseBackupCreate,
37+
Read: resourceTencentCloudClickhouseBackupRead,
38+
Update: resourceTencentCloudClickhouseBackupUpdate,
39+
Delete: resourceTencentCloudClickhouseBackupDelete,
40+
Importer: &schema.ResourceImporter{
41+
State: schema.ImportStatePassthrough,
42+
},
43+
Schema: map[string]*schema.Schema{
44+
"instance_id": {
45+
Required: true,
46+
Type: schema.TypeString,
47+
Description: "Instance id.",
48+
},
49+
50+
"cos_bucket_name": {
51+
Required: true,
52+
Type: schema.TypeString,
53+
Description: "COS bucket name.",
54+
},
55+
},
56+
}
57+
}
58+
59+
func resourceTencentCloudClickhouseBackupCreate(d *schema.ResourceData, meta interface{}) error {
60+
defer logElapsed("resource.tencentcloud_clickhouse_backup.create")()
61+
defer inconsistentCheck(d, meta)()
62+
63+
logId := getLogId(contextNil)
64+
65+
var (
66+
request = clickhouse.NewOpenBackUpRequest()
67+
instanceId string
68+
)
69+
if v, ok := d.GetOk("instance_id"); ok {
70+
instanceId = v.(string)
71+
request.InstanceId = helper.String(instanceId)
72+
}
73+
74+
request.OperationType = helper.String("open")
75+
76+
if v, ok := d.GetOk("cos_bucket_name"); ok {
77+
request.CosBucketName = helper.String(v.(string))
78+
}
79+
80+
err := resource.Retry(writeRetryTimeout, func() *resource.RetryError {
81+
result, e := meta.(*TencentCloudClient).apiV3Conn.UseCdwchClient().OpenBackUp(request)
82+
if e != nil {
83+
return retryError(e)
84+
}
85+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
86+
87+
return nil
88+
})
89+
if err != nil {
90+
log.Printf("[CRITAL]%s create clickhouse backup failed, reason:%+v", logId, err)
91+
return err
92+
}
93+
94+
d.SetId(instanceId)
95+
96+
return resourceTencentCloudClickhouseBackupRead(d, meta)
97+
}
98+
99+
func resourceTencentCloudClickhouseBackupRead(d *schema.ResourceData, meta interface{}) error {
100+
defer logElapsed("resource.tencentcloud_clickhouse_backup.read")()
101+
defer inconsistentCheck(d, meta)()
102+
103+
logId := getLogId(contextNil)
104+
105+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
106+
107+
service := CdwchService{client: meta.(*TencentCloudClient).apiV3Conn}
108+
109+
instanceId := d.Id()
110+
111+
backup, err := service.DescribeBackUpScheduleById(ctx, instanceId)
112+
if err != nil {
113+
return err
114+
}
115+
116+
if backup == nil {
117+
d.SetId("")
118+
log.Printf("[WARN]%s resource `ClickhouseBackup` [%s] not found, please check if it has been deleted.\n", logId, d.Id())
119+
return nil
120+
}
121+
122+
_ = d.Set("instance_id", instanceId)
123+
124+
if backup.MetaStrategy != nil && backup.MetaStrategy.CosBucketName != nil {
125+
_ = d.Set("cos_bucket_name", backup.MetaStrategy.CosBucketName)
126+
}
127+
128+
return nil
129+
}
130+
131+
func resourceTencentCloudClickhouseBackupUpdate(d *schema.ResourceData, meta interface{}) error {
132+
defer logElapsed("resource.tencentcloud_clickhouse_backup.update")()
133+
defer inconsistentCheck(d, meta)()
134+
135+
immutableArgs := []string{"instance_id", "operation_type", "cos_bucket_name"}
136+
137+
for _, v := range immutableArgs {
138+
if d.HasChange(v) {
139+
return fmt.Errorf("argument `%s` cannot be changed", v)
140+
}
141+
}
142+
return resourceTencentCloudClickhouseBackupRead(d, meta)
143+
}
144+
145+
func resourceTencentCloudClickhouseBackupDelete(d *schema.ResourceData, meta interface{}) error {
146+
defer logElapsed("resource.tencentcloud_clickhouse_backup.delete")()
147+
defer inconsistentCheck(d, meta)()
148+
149+
logId := getLogId(contextNil)
150+
instanceId := d.Id()
151+
request := clickhouse.NewOpenBackUpRequest()
152+
request.InstanceId = helper.String(instanceId)
153+
request.OperationType = helper.String("close")
154+
request.CosBucketName = helper.String(d.Get("cos_bucket_name").(string))
155+
156+
err := resource.Retry(writeRetryTimeout, func() *resource.RetryError {
157+
result, e := meta.(*TencentCloudClient).apiV3Conn.UseCdwchClient().OpenBackUp(request)
158+
if e != nil {
159+
return retryError(e)
160+
} else {
161+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
162+
}
163+
return nil
164+
})
165+
if err != nil {
166+
log.Printf("[CRITAL]%s create clickhouse backup failed, reason:%+v", logId, err)
167+
return err
168+
}
169+
170+
return nil
171+
}

0 commit comments

Comments
 (0)