Skip to content

Commit a4ec5ee

Browse files
committed
feat: new resource - tencentcloud_clb_logset
1 parent a4d56a9 commit a4ec5ee

File tree

15 files changed

+8252
-0
lines changed

15 files changed

+8252
-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: 160 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
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+
"name": {
42+
Type: schema.TypeString,
43+
Optional: true,
44+
Default: "clb_logset",
45+
Description: "Logset name, which must be unique among all CLS logsets. Default is `clb_logset`.",
46+
},
47+
"period": {
48+
Type: schema.TypeInt,
49+
Optional: true,
50+
ForceNew: true,
51+
Description: "Logset retention period in days. Maximun value is `90`.",
52+
},
53+
"create_time": {
54+
Type: schema.TypeString,
55+
Computed: true,
56+
Description: "Logset creation time.",
57+
},
58+
"topic_count": {
59+
Type: schema.TypeString,
60+
Computed: true,
61+
Description: "Number of log topics in logset.",
62+
},
63+
},
64+
}
65+
}
66+
67+
func resourceTencentCloudClbLogSetRead(d *schema.ResourceData, meta interface{}) error {
68+
defer logElapsed("resource.tencentcloud_clb_logset.read")()
69+
defer inconsistentCheck(d, meta)()
70+
71+
logId := getLogId(contextNil)
72+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
73+
service := ClsService{ client: meta.(*TencentCloudClient).apiV3Conn }
74+
75+
id := d.Id()
76+
77+
info, err := service.DescribeClsLogSetById(ctx, id)
78+
79+
if err != nil {
80+
return err
81+
}
82+
83+
if info == nil {
84+
d.SetId("")
85+
return fmt.Errorf("resource `Logset` %s does not exist", id)
86+
}
87+
88+
_ = d.Set("name", info.LogsetName)
89+
_ = d.Set("create_time", info.CreateTime)
90+
_ = d.Set("topic_count", info.TopicCount)
91+
92+
return nil
93+
}
94+
95+
func resourceTencentCloudClbLogSetCreate(d *schema.ResourceData, meta interface{}) error {
96+
defer logElapsed("resource.tencentcloud_clb_logset.create")()
97+
defer clbActionMu.Unlock()
98+
clbActionMu.Lock()
99+
100+
logId := getLogId(contextNil)
101+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
102+
service := ClbService{client: meta.(*TencentCloudClient).apiV3Conn}
103+
104+
var (
105+
name = d.Get("name").(string)
106+
period = d.Get("period").(int)
107+
)
108+
109+
// We're not support health logs for now
110+
id, err := service.CreateClbLogSet(ctx, name, "", period)
111+
112+
if err != nil {
113+
return err
114+
}
115+
116+
d.SetId(id)
117+
118+
return resourceTencentCloudClbLogSetRead(d, meta)
119+
}
120+
121+
func resourceTencentCloudClbLogSetUpdate(d *schema.ResourceData, meta interface{}) error {
122+
defer logElapsed("resource.tencentcloud_clb_logset.update")()
123+
logId := getLogId(contextNil)
124+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
125+
service := ClsService{ client: meta.(*TencentCloudClient).apiV3Conn }
126+
request := cls.NewModifyLogsetRequest()
127+
128+
request.LogsetId = helper.String(d.Id())
129+
130+
if d.HasChange("name") {
131+
request.LogsetName = helper.String(d.Get("name").(string))
132+
}
133+
134+
err := service.UpdateClsLogSet(ctx, request)
135+
136+
if err != nil {
137+
return err
138+
}
139+
140+
return resourceTencentcloudEKSClusterRead(d, meta)
141+
}
142+
143+
func resourceTencentCloudClbLogSetDelete(d *schema.ResourceData, meta interface{}) error {
144+
defer logElapsed("resource.tencentcloud_clb_logset.delete")()
145+
146+
clbActionMu.Lock()
147+
defer clbActionMu.Unlock()
148+
149+
logId := getLogId(contextNil)
150+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
151+
service := ClsService{ client: meta.(*TencentCloudClient).apiV3Conn }
152+
id := d.Id()
153+
154+
155+
if err := service.DeleteClsLogSet(ctx, id); err != nil {
156+
return err
157+
}
158+
159+
return nil
160+
}
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
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.TestCheckResourceAttrSet("tencentcloud_clb_logset.test_logset", "topic_count"),
27+
resource.TestCheckResourceAttr("tencentcloud_clb_logset.test_logset", "name", "clb_logset_test1"),
28+
resource.TestCheckResourceAttr("tencentcloud_clb_logset.test_logset", "period", "7"),
29+
),
30+
},
31+
{
32+
Config: testAccClbLogset_update,
33+
Check: resource.ComposeTestCheckFunc(
34+
testAccCheckClbLogsetExists("tencentcloud_clb_logset.test_logset"),
35+
resource.TestCheckResourceAttrSet("tencentcloud_clb_logset.test_logset", "create_time"),
36+
resource.TestCheckResourceAttrSet("tencentcloud_clb_logset.test_logset", "topic_count"),
37+
resource.TestCheckResourceAttr("tencentcloud_clb_logset.test_logset", "name", "clb_logset_test2"),
38+
resource.TestCheckResourceAttr("tencentcloud_clb_logset.test_logset", "period", "7"),
39+
),
40+
},
41+
{
42+
ResourceName: "tencentcloud_clb_logset.test_logset",
43+
ImportState: true,
44+
ImportStateVerify: true,
45+
},
46+
},
47+
})
48+
}
49+
50+
func testAccCheckClbLogsetDestroy(s *terraform.State) error {
51+
logId := getLogId(contextNil)
52+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
53+
54+
clsService := ClsService{
55+
client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn,
56+
}
57+
for _, rs := range s.RootModule().Resources {
58+
if rs.Type != "tencentcloud_clb_logset" {
59+
continue
60+
}
61+
time.Sleep(5 * time.Second)
62+
resourceId := rs.Primary.ID
63+
info, err := clsService.DescribeClsLogSetById(ctx, resourceId)
64+
if info != nil && err == nil {
65+
return fmt.Errorf("[CHECK][CLB logset][Destroy] check: CLB logset still exists: %s", rs.Primary.ID)
66+
}
67+
}
68+
return nil
69+
}
70+
71+
func testAccCheckClbLogsetExists(n string) resource.TestCheckFunc {
72+
return func(s *terraform.State) error {
73+
logId := getLogId(contextNil)
74+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
75+
76+
rs, ok := s.RootModule().Resources[n]
77+
if !ok {
78+
return fmt.Errorf("[CHECK][CLB logset][Exists] check: CLB logset %s is not found", n)
79+
}
80+
if rs.Primary.ID == "" {
81+
return fmt.Errorf("[CHECK][CLB logset][Exists] check: CLB logset id is not set")
82+
}
83+
service := ClsService{
84+
client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn,
85+
}
86+
resourceId := rs.Primary.ID
87+
instance, err := service.DescribeClsLogSetById(ctx, resourceId)
88+
if err != nil {
89+
return err
90+
}
91+
if instance == nil {
92+
return fmt.Errorf("[CHECK][CLB logset][Exists] id %s is not exist", rs.Primary.ID)
93+
}
94+
return nil
95+
}
96+
}
97+
98+
const testAccClbLogset_basic = `
99+
resource "tencentcloud_clb_logset" "test_logset" {
100+
name = "clb_logset_test1"
101+
period = 7
102+
}
103+
`
104+
105+
const testAccClbLogset_update = `
106+
resource "tencentcloud_clb_logset" "test_logset" {
107+
name = "clb_logset_test2"
108+
period = 7
109+
}
110+
`

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)