Skip to content

Commit 3bcc33b

Browse files
authored
Merge pull request #731 from tencentcloudstack/feat/clb-logset
Feat/clb logset
2 parents a4d56a9 + c644fd9 commit 3bcc33b

File tree

15 files changed

+8236
-0
lines changed

15 files changed

+8236
-0
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.290
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.290 h1:PJ/XwIXHUVIi/OwvtUKOSWB+x5qn42oJettG6bhHfNQ=
472+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls v1.0.290/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: 15 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,16 @@ func (me *TencentCloudClient) UseApiClient() *api.Client {
621623

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

tencentcloud/provider.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,7 @@ Cloud Load Balancer(CLB)
215215
tencentcloud_clb_target_group
216216
tencentcloud_clb_target_group_instance_attachment
217217
tencentcloud_clb_target_group_attachment
218+
tencentcloud_clb_logset
218219
219220
Cloud Object Storage(COS)
220221
Data Source
@@ -866,6 +867,7 @@ func Provider() terraform.ResourceProvider {
866867
"tencentcloud_clb_target_group": resourceTencentCloudClbTargetGroup(),
867868
"tencentcloud_clb_target_group_instance_attachment": resourceTencentCloudClbTGAttachmentInstance(),
868869
"tencentcloud_clb_target_group_attachment": resourceTencentCloudClbTargetGroupAttachment(),
870+
"tencentcloud_clb_logset": resourceTencentCloudClbLogSet(),
869871
"tencentcloud_container_cluster": resourceTencentCloudContainerCluster(),
870872
"tencentcloud_container_cluster_instance": resourceTencentCloudContainerClusterInstance(),
871873
"tencentcloud_kubernetes_cluster": resourceTencentCloudTkeCluster(),
Lines changed: 163 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,163 @@
1+
/*
2+
Provides a resource to create an exclusive CLB Logset.
3+
4+
Example Usage
5+
6+
```hcl
7+
resource "tencentcloud_clb_logset" "foo" {
8+
name = "clb_logset"
9+
perioid = 7
10+
}
11+
```
12+
13+
Import
14+
15+
CLB attachment can be imported using the id, e.g.
16+
17+
```
18+
$ terraform import tencentcloud_clb_logset.foo 4eb9e3a8-9c42-4b32-9ddf-e215e9c92764
19+
```
20+
*/
21+
package tencentcloud
22+
23+
import (
24+
"context"
25+
"fmt"
26+
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
27+
cls "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls/v20201016"
28+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
29+
)
30+
31+
func resourceTencentCloudClbLogSet() *schema.Resource {
32+
return &schema.Resource{
33+
Create: resourceTencentCloudClbLogSetCreate,
34+
Read: resourceTencentCloudClbLogSetRead,
35+
Delete: resourceTencentCloudClbLogSetDelete,
36+
//Update: resourceTencentCloudClbLogSetUpdate,
37+
Importer: &schema.ResourceImporter{
38+
State: schema.ImportStatePassthrough,
39+
},
40+
Schema: map[string]*schema.Schema{
41+
"period": {
42+
Type: schema.TypeInt,
43+
Optional: true,
44+
ForceNew: true,
45+
Description: "Logset retention period in days. Maximun value is `90`.",
46+
},
47+
"name": {
48+
Type: schema.TypeString,
49+
Computed: true,
50+
Description: "Logset name, which unique and fixed `clb_logset` among all CLS logsets.",
51+
},
52+
"create_time": {
53+
Type: schema.TypeString,
54+
Computed: true,
55+
Description: "Logset creation time.",
56+
},
57+
"topic_count": {
58+
Type: schema.TypeString,
59+
Computed: true,
60+
Description: "Number of log topics in logset.",
61+
},
62+
},
63+
}
64+
}
65+
66+
func resourceTencentCloudClbLogSetRead(d *schema.ResourceData, meta interface{}) error {
67+
defer logElapsed("resource.tencentcloud_clb_logset.read")()
68+
defer inconsistentCheck(d, meta)()
69+
70+
logId := getLogId(contextNil)
71+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
72+
service := ClsService{client: meta.(*TencentCloudClient).apiV3Conn}
73+
74+
id := d.Id()
75+
76+
info, err := service.DescribeClsLogSetById(ctx, id)
77+
78+
if err != nil {
79+
return err
80+
}
81+
82+
if info == nil {
83+
d.SetId("")
84+
return fmt.Errorf("resource `Logset` %s does not exist", id)
85+
}
86+
87+
_ = d.Set("name", info.LogsetName)
88+
89+
//
90+
//if _, ok := d.GetOk("period"); !ok {
91+
// _ = d.Set("period", info)
92+
//}
93+
_ = d.Set("create_time", info.CreateTime)
94+
_ = d.Set("topic_count", info.TopicCount)
95+
96+
return nil
97+
}
98+
99+
func resourceTencentCloudClbLogSetCreate(d *schema.ResourceData, meta interface{}) error {
100+
defer logElapsed("resource.tencentcloud_clb_logset.create")()
101+
defer clbActionMu.Unlock()
102+
clbActionMu.Lock()
103+
104+
logId := getLogId(contextNil)
105+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
106+
service := ClbService{client: meta.(*TencentCloudClient).apiV3Conn}
107+
108+
var (
109+
period = d.Get("period").(int)
110+
)
111+
112+
// We're not support specify name and health logs for now
113+
id, err := service.CreateClbLogSet(ctx, "clb_logset", "", period)
114+
115+
if err != nil {
116+
return err
117+
}
118+
119+
d.SetId(id)
120+
121+
return resourceTencentCloudClbLogSetRead(d, meta)
122+
}
123+
124+
// All fields are now Computed/ForceNew, means it does not support update
125+
func resourceTencentCloudClbLogSetUpdate(d *schema.ResourceData, meta interface{}) error {
126+
defer logElapsed("resource.tencentcloud_clb_logset.update")()
127+
logId := getLogId(contextNil)
128+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
129+
service := ClsService{client: meta.(*TencentCloudClient).apiV3Conn}
130+
request := cls.NewModifyLogsetRequest()
131+
132+
request.LogsetId = helper.String(d.Id())
133+
134+
if d.HasChange("name") {
135+
request.LogsetName = helper.String(d.Get("name").(string))
136+
}
137+
138+
err := service.UpdateClsLogSet(ctx, request)
139+
140+
if err != nil {
141+
return err
142+
}
143+
144+
return resourceTencentCloudClbLogSetCreate(d, meta)
145+
}
146+
147+
func resourceTencentCloudClbLogSetDelete(d *schema.ResourceData, meta interface{}) error {
148+
defer logElapsed("resource.tencentcloud_clb_logset.delete")()
149+
150+
clbActionMu.Lock()
151+
defer clbActionMu.Unlock()
152+
153+
logId := getLogId(contextNil)
154+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
155+
service := ClsService{client: meta.(*TencentCloudClient).apiV3Conn}
156+
id := d.Id()
157+
158+
if err := service.DeleteClsLogSet(ctx, id); err != nil {
159+
return err
160+
}
161+
162+
return nil
163+
}
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
package tencentcloud
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"testing"
7+
"time"
8+
9+
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
10+
"github.com/hashicorp/terraform-plugin-sdk/terraform"
11+
)
12+
13+
func TestAccTencentCloudClbLogset_basic(t *testing.T) {
14+
t.Parallel()
15+
16+
resource.Test(t, resource.TestCase{
17+
PreCheck: func() { testAccPreCheck(t) },
18+
Providers: testAccProviders,
19+
CheckDestroy: testAccCheckClbLogsetDestroy,
20+
Steps: []resource.TestStep{
21+
{
22+
Config: testAccClbLogset_basic,
23+
Check: resource.ComposeTestCheckFunc(
24+
testAccCheckClbLogsetExists("tencentcloud_clb_logset.test_logset"),
25+
resource.TestCheckResourceAttrSet("tencentcloud_clb_logset.test_logset", "create_time"),
26+
resource.TestCheckResourceAttr("tencentcloud_clb_logset.test_logset", "name", "clb_logset"),
27+
resource.TestCheckResourceAttr("tencentcloud_clb_logset.test_logset", "period", "7"),
28+
),
29+
},
30+
{
31+
ResourceName: "tencentcloud_clb_logset.test_logset",
32+
ImportState: true,
33+
ImportStateVerify: true,
34+
},
35+
},
36+
})
37+
}
38+
39+
func testAccCheckClbLogsetDestroy(s *terraform.State) error {
40+
logId := getLogId(contextNil)
41+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
42+
43+
clsService := ClsService{
44+
client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn,
45+
}
46+
for _, rs := range s.RootModule().Resources {
47+
if rs.Type != "tencentcloud_clb_logset" {
48+
continue
49+
}
50+
time.Sleep(5 * time.Second)
51+
resourceId := rs.Primary.ID
52+
info, err := clsService.DescribeClsLogSetById(ctx, resourceId)
53+
if info != nil && err == nil {
54+
return fmt.Errorf("[CHECK][CLB logset][Destroy] check: CLB logset still exists: %s", rs.Primary.ID)
55+
}
56+
}
57+
return nil
58+
}
59+
60+
func testAccCheckClbLogsetExists(n string) resource.TestCheckFunc {
61+
return func(s *terraform.State) error {
62+
logId := getLogId(contextNil)
63+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
64+
65+
rs, ok := s.RootModule().Resources[n]
66+
if !ok {
67+
return fmt.Errorf("[CHECK][CLB logset][Exists] check: CLB logset %s is not found", n)
68+
}
69+
if rs.Primary.ID == "" {
70+
return fmt.Errorf("[CHECK][CLB logset][Exists] check: CLB logset id is not set")
71+
}
72+
service := ClsService{
73+
client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn,
74+
}
75+
resourceId := rs.Primary.ID
76+
instance, err := service.DescribeClsLogSetById(ctx, resourceId)
77+
if err != nil {
78+
return err
79+
}
80+
if instance == nil {
81+
return fmt.Errorf("[CHECK][CLB logset][Exists] id %s is not exist", rs.Primary.ID)
82+
}
83+
return nil
84+
}
85+
}
86+
87+
const testAccClbLogset_basic = `
88+
resource "tencentcloud_clb_logset" "test_logset" {
89+
period = 7
90+
}
91+
`

tencentcloud/service_tencentcloud_clb.go

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1348,3 +1348,50 @@ func (me *ClbService) ModifyTargetGroupInstancesWeight(ctx context.Context, targ
13481348
}
13491349
return nil
13501350
}
1351+
1352+
func (me *ClbService) DescribeClbLogSet(ctx context.Context) (logSetId string, healthId string, errRet error) {
1353+
logId := getLogId(ctx)
1354+
request := clb.NewDescribeClsLogSetRequest()
1355+
defer func() {
1356+
if errRet != nil {
1357+
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n",
1358+
logId, "delete object", request.ToJsonString(), errRet.Error())
1359+
}
1360+
}()
1361+
ratelimit.Check(request.GetAction())
1362+
response, err := me.client.UseClbClient().DescribeClsLogSet(request)
1363+
if err != nil {
1364+
errRet = err
1365+
return
1366+
}
1367+
1368+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n",
1369+
logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
1370+
1371+
logSetId = *response.Response.LogsetId
1372+
healthId = *response.Response.HealthLogsetId
1373+
return
1374+
}
1375+
1376+
func (me *ClbService) CreateClbLogSet(ctx context.Context, name string, logsetType string, period int) (id string, errRet error){
1377+
logId := getLogId(ctx)
1378+
request := clb.NewCreateClsLogSetRequest()
1379+
request.Period = helper.IntUint64(period)
1380+
request.LogsetName = &name
1381+
if logsetType != "" {
1382+
request.LogsetType = &logsetType
1383+
}
1384+
ratelimit.Check(request.GetAction())
1385+
response, err := me.client.UseClbClient().CreateClsLogSet(request)
1386+
if err != nil {
1387+
errRet = err
1388+
return
1389+
}
1390+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n",
1391+
logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
1392+
1393+
if response.Response != nil {
1394+
id = *response.Response.LogsetId
1395+
}
1396+
return
1397+
}

0 commit comments

Comments
 (0)