Skip to content

Commit 8cb77d3

Browse files
author
mikatong
committed
feat support clb topic
1 parent 3f7123c commit 8cb77d3

File tree

12 files changed

+7933
-13
lines changed

12 files changed

+7933
-13
lines changed

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ require (
2828
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka v1.0.199
2929
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb v1.0.283
3030
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit v1.0.199
31+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls v1.0.291
3132
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.264
3233
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.199
3334
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.199

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -468,6 +468,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb v1.0.283 h1:8pML0Ut
468468
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb v1.0.283/go.mod h1:zgARzAnsLzpLhdpAHrHTUilOXytH9aEJy5ssCdizVV0=
469469
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit v1.0.199 h1:o41qFAFJGPDTLNWXs7nLw4fsDxFUCe5gkO2YXI9Ye6Q=
470470
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit v1.0.199/go.mod h1:b7dNjabPys0/iLwRFd8MVE5EkJTNAh4qtaHQOOLchx4=
471+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls v1.0.291 h1:r7GSk4v8od8srrBrpnsHz9Hxrq0fLNO2u1m4ABQVX5g=
472+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls v1.0.291/go.mod h1:O5PQ2JoBWhmSNVils3vZyS1GPeRdXA8Lu23ZEjiUfZ8=
471473
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.194/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
472474
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.264 h1:USf7I8ohzoqCwAcCHz5rz0hD57mmNXZgrLfxFLx1WmA=
473475
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.264/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=

tencentcloud/connectivity/client.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import (
2424
ckafka "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka/v20190819"
2525
clb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb/v20180317"
2626
audit "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit/v20190319"
27+
cls "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls/v20201016"
2728
"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common"
2829
"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile"
2930
cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312"
@@ -96,6 +97,7 @@ type TencentCloudClient struct {
9697
kmsConn *kms.Client
9798
ssmConn *ssm.Client
9899
apiConn *api.Client
100+
clsConn *cls.Client
99101
}
100102

101103
// NewClientProfile returns a new ClientProfile
@@ -621,3 +623,15 @@ func (me *TencentCloudClient) UseApiClient() *api.Client {
621623

622624
return me.apiConn
623625
}
626+
627+
// UseClsClient return API client for service
628+
func (me *TencentCloudClient) UseClsClient() *cls.Client {
629+
if me.clsConn != nil {
630+
return me.clsConn
631+
}
632+
cpf := me.NewClientProfile(300)
633+
me.clsConn, _ = cls.NewClient(me.Credential, me.Region, cpf)
634+
me.clsConn.WithHttpTransport(&LogRoundTripper{})
635+
636+
return me.clsConn
637+
}

tencentcloud/resource_tc_clb_instance.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -360,7 +360,7 @@ func resourceTencentCloudClbInstanceCreate(d *schema.ResourceData, meta interfac
360360
request.SlaveZoneId = helper.String(v.(string))
361361
}
362362

363-
if v, ok := d.GetOk("load_balancer_pass_to_target"); ok{
363+
if v, ok := d.GetOk("load_balancer_pass_to_target"); ok {
364364
request.LoadBalancerPassToTarget = helper.Bool(v.(bool))
365365
}
366366
clbId := ""

tencentcloud/resource_tc_clb_instance_topic.go

Lines changed: 62 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,13 @@ package tencentcloud
1515
import (
1616
"context"
1717
"log"
18+
"sync"
1819

1920
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
2021
)
2122

23+
var clsActionMu = &sync.Mutex{}
24+
2225
func resourceTencentCloudClbInstanceTopic() *schema.Resource {
2326
return &schema.Resource{
2427
Create: resourceTencentCloudClbInstanceTopicCreate,
@@ -41,21 +44,76 @@ func resourceTencentCloudClbInstanceTopic() *schema.Resource {
4144
ValidateFunc: validateIntegerInRange(1, 10),
4245
Description: "Topic partition count of CLB instance.(Default 1).",
4346
},
47+
"limit": {
48+
Type: schema.TypeInt,
49+
Optional: true,
50+
Description: "Fetch topic info pagination limit.",
51+
},
52+
"offset": {
53+
Type: schema.TypeInt,
54+
Optional: true,
55+
Description: "Fetch topic info pagination offset.",
56+
},
4457
},
4558
}
4659
}
4760

4861
func resourceTencentCloudClbInstanceTopicRead(d *schema.ResourceData, meta interface{}) error {
62+
clsActionMu.Lock()
63+
defer clsActionMu.Unlock()
64+
logId := getLogId(contextNil)
65+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
66+
var topicName string
67+
if value, ok := d.GetOk("topic_name"); ok {
68+
topicName = value.(string)
69+
}
70+
clsService := ClsService{
71+
client: meta.(*TencentCloudClient).apiV3Conn,
72+
}
73+
res, ok := clsService.DescribeTopicsByTopicName(ctx, topicName)
74+
if ok != nil {
75+
return ok
76+
}
77+
_ = d.Set("logset_id", res.LogsetId)
78+
_ = d.Set("topic_id", res.TopicId)
79+
_ = d.Set("topic_name", res.TopicName)
80+
_ = d.Set("partition_count", res.PartitionCount)
81+
_ = d.Set("index", res.Index)
82+
_ = d.Set("create_time", res.CreateTime)
83+
_ = d.Set("status", res.Status)
84+
_ = d.Set("tags", res.Tags)
85+
_ = d.Set("auto_split", res.AutoSplit)
86+
_ = d.Set("max_split_partitions", res.MaxSplitPartitions)
87+
_ = d.Set("storage_type", res.StorageType)
88+
_ = d.Set("period", res.Period)
4989
return nil
90+
5091
}
92+
5193
func resourceTencentCloudClbInstanceTopicUpdate(d *schema.ResourceData, meta interface{}) error {
5294
return nil
5395
}
96+
5497
func resourceTencentCloudClbInstanceTopicDelete(d *schema.ResourceData, meta interface{}) error {
98+
clsActionMu.Lock()
99+
defer clsActionMu.Unlock()
100+
logId := getLogId(contextNil)
101+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
102+
var topicName string
103+
if value, ok := d.GetOk("topic_name"); ok {
104+
topicName = value.(string)
105+
}
106+
clsService := ClsService{
107+
client: meta.(*TencentCloudClient).apiV3Conn,
108+
}
109+
_, ok := clsService.DeleteTopicsByTopicName(ctx, topicName)
110+
if ok != nil {
111+
return ok
112+
}
55113
return nil
56114
}
57-
func resourceTencentCloudClbInstanceTopicCreate(d *schema.ResourceData, meta interface{}) error {
58115

116+
func resourceTencentCloudClbInstanceTopicCreate(d *schema.ResourceData, meta interface{}) error {
59117
logId := getLogId(contextNil)
60118
ctx := context.WithValue(context.TODO(), logIdKey, logId)
61119
params := make(map[string]interface{})
@@ -68,10 +126,11 @@ func resourceTencentCloudClbInstanceTopicCreate(d *schema.ResourceData, meta int
68126
clbService := ClbService{
69127
client: meta.(*TencentCloudClient).apiV3Conn,
70128
}
71-
err := clbService.CreateTopic(ctx, params)
129+
resp, err := clbService.CreateTopic(ctx, params)
130+
d.SetId(*resp.Response.TopicId)
72131
if err != nil {
73132
log.Printf("[CRITAL]%s create CLB topic failed, reason:%+v", logId, err)
74133
return err
75134
}
76-
return nil
135+
return resourceTencentCloudClbInstanceTopicRead(d, meta)
77136
}

tencentcloud/service_tencentcloud_clb.go

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1059,7 +1059,7 @@ func (me *ClbService) CreateTargetGroup(ctx context.Context, targetGroupName str
10591059
return
10601060
}
10611061

1062-
func (me *ClbService) CreateTopic(ctx context.Context, params map[string]interface{}) error {
1062+
func (me *ClbService) CreateTopic(ctx context.Context, params map[string]interface{}) (response *clb.CreateTopicResponse, err error) {
10631063

10641064
request := clb.NewCreateTopicRequest()
10651065

@@ -1071,17 +1071,16 @@ func (me *ClbService) CreateTopic(ctx context.Context, params map[string]interfa
10711071
request.PartitionCount = common.Uint64Ptr((uint64)(partitionCount.(int)))
10721072
}
10731073

1074-
err := resource.Retry(writeRetryTimeout, func() *resource.RetryError {
1075-
_, err := me.client.UseClbClient().CreateTopic(request)
1076-
if err != nil {
1077-
return retryError(err)
1074+
err = resource.Retry(writeRetryTimeout, func() *resource.RetryError {
1075+
resp, ok := me.client.UseClbClient().CreateTopic(request)
1076+
if ok != nil {
1077+
err = ok
1078+
return retryError(ok)
10781079
}
1080+
response = resp
10791081
return nil
10801082
})
1081-
if err != nil {
1082-
return err
1083-
}
1084-
return nil
1083+
return
10851084
}
10861085

10871086
func (me *ClbService) ModifyTargetGroup(ctx context.Context, targetGroupId, targetGroupName string, port uint64) (err error) {
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
package tencentcloud
2+
3+
import (
4+
"context"
5+
"log"
6+
7+
"github.com/pkg/errors"
8+
cls "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls/v20201016"
9+
"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common"
10+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity"
11+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit"
12+
)
13+
14+
type ClsService struct {
15+
client *connectivity.TencentCloudClient
16+
}
17+
18+
func (me *ClsService) DescribeTopicsByTopicName(ctx context.Context, topicName string) (clbInstance *cls.TopicInfo, errRet error) {
19+
logId := getLogId(ctx)
20+
request := cls.NewDescribeTopicsRequest()
21+
request.Filters = []*cls.Filter{
22+
{
23+
Key: common.StringPtr("topicName"),
24+
Values: []*string{&topicName},
25+
},
26+
}
27+
ratelimit.Check(request.GetAction())
28+
response, err := me.client.UseClsClient().DescribeTopics(request)
29+
if err != nil {
30+
errRet = errors.WithStack(err)
31+
return
32+
}
33+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n",
34+
logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
35+
36+
if len(response.Response.Topics) < 1 {
37+
return
38+
}
39+
clbInstance = response.Response.Topics[0]
40+
log.Printf("[==============clbInstance]: %v", clbInstance)
41+
return
42+
}
43+
44+
func (me *ClsService) DeleteTopicsByTopicName(ctx context.Context, topicName string) (topicInfo *cls.TopicInfo, errRet error) {
45+
logId := getLogId(ctx)
46+
request := cls.NewDescribeTopicsRequest()
47+
request.Filters = []*cls.Filter{
48+
{
49+
Key: common.StringPtr("topicName"),
50+
Values: []*string{&topicName},
51+
},
52+
}
53+
ratelimit.Check(request.GetAction())
54+
client := me.client.UseClsClient()
55+
response, err := client.DescribeTopics(request)
56+
if err != nil {
57+
errRet = errors.WithStack(err)
58+
return
59+
}
60+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n",
61+
logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
62+
63+
if len(response.Response.Topics) < 1 {
64+
return
65+
}
66+
clbInstance := response.Response.Topics[0]
67+
68+
delRequest := cls.NewDeleteTopicRequest()
69+
delRequest.TopicId = clbInstance.TopicId
70+
_, err = client.DeleteTopic(delRequest)
71+
if err != nil {
72+
errRet = errors.WithStack(err)
73+
return
74+
}
75+
topicInfo = clbInstance
76+
return
77+
}

0 commit comments

Comments
 (0)