Skip to content

Commit 018a721

Browse files
committed
add
1 parent 8451aa1 commit 018a721

11 files changed

+417
-22
lines changed

tencentcloud/provider.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1448,6 +1448,8 @@ func Provider() *schema.Provider {
14481448
"tencentcloud_clb_instance_sla_config": clb.ResourceTencentCloudClbInstanceSlaConfig(),
14491449
"tencentcloud_clb_replace_cert_for_lbs": clb.ResourceTencentCloudClbReplaceCertForLbs(),
14501450
"tencentcloud_clb_security_group_attachment": clb.ResourceTencentCloudClbSecurityGroupAttachment(),
1451+
"tencentcloud_clb_target_group_attachments": clb.ResourceTencentCloudClbTargetGroupAttachments(),
1452+
"tencentcloud_clb_cls_log_attachment": clb.ResourceTencentCloudClbClsLogAttachment(),
14511453
"tencentcloud_gwlb_instance": gwlb.ResourceTencentCloudGwlbInstance(),
14521454
"tencentcloud_gwlb_target_group": gwlb.ResourceTencentCloudGwlbTargetGroup(),
14531455
"tencentcloud_gwlb_instance_associate_target_group": gwlb.ResourceTencentCloudGwlbInstanceAssociateTargetGroup(),
@@ -2412,7 +2414,6 @@ func Provider() *schema.Provider {
24122414
"tencentcloud_cdwpg_userhba": cdwpg.ResourceTencentCloudCdwpgUserhba(),
24132415
"tencentcloud_clickhouse_keyval_config": cdwch.ResourceTencentCloudClickhouseKeyvalConfig(),
24142416
"tencentcloud_clickhouse_xml_config": cdwch.ResourceTencentCloudClickhouseXmlConfig(),
2415-
"tencentcloud_clb_target_group_attachments": clb.ResourceTencentCloudClbTargetGroupAttachments(),
24162417
"tencentcloud_vpc_peer_connect_manager": vpc.ResourceTencentCloudVpcPeerConnectManager(),
24172418
"tencentcloud_vpc_peer_connect_accept_operation": vpc.ResourceTencentCloudVpcPeerConnectAcceptOperation(),
24182419
"tencentcloud_vpc_peer_connect_reject_operation": vpc.ResourceTencentCloudVpcPeerConnectRejectOperation(),

tencentcloud/provider.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -418,6 +418,7 @@ tencentcloud_clb_instance_sla_config
418418
tencentcloud_clb_instance_mix_ip_target_config
419419
tencentcloud_clb_replace_cert_for_lbs
420420
tencentcloud_clb_security_group_attachment
421+
tencentcloud_clb_cls_log_attachment
421422

422423
Cloud Object Storage(COS)
423424
Data Source
Lines changed: 193 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,193 @@
1+
package clb
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"log"
7+
"strings"
8+
9+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
10+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
11+
clbv20180317 "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb/v20180317"
12+
13+
tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
14+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
15+
)
16+
17+
func ResourceTencentCloudClbClsLogAttachment() *schema.Resource {
18+
return &schema.Resource{
19+
Create: resourceTencentCloudClbClsLogAttachmentCreate,
20+
Read: resourceTencentCloudClbClsLogAttachmentRead,
21+
Delete: resourceTencentCloudClbClsLogAttachmentDelete,
22+
Schema: map[string]*schema.Schema{
23+
"load_balancer_id": {
24+
Type: schema.TypeString,
25+
Required: true,
26+
ForceNew: true,
27+
Description: "CLB instance ID.",
28+
},
29+
30+
"log_set_id": {
31+
Type: schema.TypeString,
32+
Required: true,
33+
ForceNew: true,
34+
Description: "Logset ID of the Cloud Log Service (CLS).<li>When adding or updating a log topic, call the [DescribeLogsets](https://intl.cloud.tencent.com/document/product/614/58624?from_cn_redirect=1) API to obtain the logset ID.</li><li>When deleting a log topic, set this parameter to null.</li>.",
35+
},
36+
37+
"log_topic_id": {
38+
Type: schema.TypeString,
39+
Required: true,
40+
ForceNew: true,
41+
Description: "Log topic ID of the CLS.<li>When adding or updating a log topic, call the [DescribeTopics](https://intl.cloud.tencent.com/document/product/614/56454?from_cn_redirect=1) API to obtain the log topic ID.</li><li>When deleting a log topic, set this parameter to null.</li>.",
42+
},
43+
44+
"log_type": {
45+
Type: schema.TypeString,
46+
Optional: true,
47+
ForceNew: true,
48+
Computed: true,
49+
Description: "Log type:\n<li>`ACCESS`: access logs</li>\n<li>`HEALTH`: health check logs</li>\nDefault: `ACCESS`.",
50+
},
51+
},
52+
}
53+
}
54+
55+
func resourceTencentCloudClbClsLogAttachmentCreate(d *schema.ResourceData, meta interface{}) error {
56+
defer tccommon.LogElapsed("resource.tencentcloud_clb_cls_log_attachment.create")()
57+
defer tccommon.InconsistentCheck(d, meta)()
58+
59+
var (
60+
logId = tccommon.GetLogId(tccommon.ContextNil)
61+
ctx = tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta)
62+
request = clbv20180317.NewSetLoadBalancerClsLogRequest()
63+
loadBalancerId string
64+
logSetId string
65+
logTopicId string
66+
)
67+
68+
if v, ok := d.GetOk("load_balancer_id"); ok {
69+
request.LoadBalancerId = helper.String(v.(string))
70+
loadBalancerId = v.(string)
71+
}
72+
73+
if v, ok := d.GetOk("log_set_id"); ok {
74+
request.LogSetId = helper.String(v.(string))
75+
logSetId = v.(string)
76+
}
77+
78+
if v, ok := d.GetOk("log_topic_id"); ok {
79+
request.LogTopicId = helper.String(v.(string))
80+
logTopicId = v.(string)
81+
}
82+
83+
if v, ok := d.GetOk("log_type"); ok {
84+
request.LogType = helper.String(v.(string))
85+
}
86+
87+
reqErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
88+
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient().SetLoadBalancerClsLogWithContext(ctx, request)
89+
if e != nil {
90+
return tccommon.RetryError(e)
91+
} else {
92+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
93+
}
94+
95+
return nil
96+
})
97+
98+
if reqErr != nil {
99+
log.Printf("[CRITAL]%s create clb cls log attachment failed, reason:%+v", logId, reqErr)
100+
return reqErr
101+
}
102+
103+
d.SetId(strings.Join([]string{loadBalancerId, logSetId, logTopicId}, tccommon.FILED_SP))
104+
return resourceTencentCloudClbClsLogAttachmentRead(d, meta)
105+
}
106+
107+
func resourceTencentCloudClbClsLogAttachmentRead(d *schema.ResourceData, meta interface{}) error {
108+
defer tccommon.LogElapsed("resource.tencentcloud_clb_cls_log_attachment.read")()
109+
defer tccommon.InconsistentCheck(d, meta)()
110+
111+
var (
112+
logId = tccommon.GetLogId(tccommon.ContextNil)
113+
ctx = tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta)
114+
service = ClbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
115+
)
116+
117+
idSplit := strings.Split(d.Id(), tccommon.FILED_SP)
118+
if len(idSplit) != 3 {
119+
return fmt.Errorf("id is broken,%s", d.Id())
120+
}
121+
122+
loadBalancerId := idSplit[0]
123+
logSetId := idSplit[1]
124+
logTopicId := idSplit[2]
125+
126+
respData, err := service.DescribeClbClsLogAttachmentById(ctx, loadBalancerId, logSetId, logTopicId)
127+
if err != nil {
128+
return err
129+
}
130+
131+
if respData == nil {
132+
log.Printf("[WARN]%s resource `tencentcloud_clb_cls_log_attachment` [%s] not found, please check if it has been deleted.\n", logId, d.Id())
133+
d.SetId("")
134+
return nil
135+
}
136+
137+
if respData.LoadBalancerId != nil {
138+
_ = d.Set("load_balancer_id", respData.LoadBalancerId)
139+
}
140+
141+
if respData.LogSetId != nil && respData.LogTopicId != nil {
142+
_ = d.Set("log_set_id", respData.LogSetId)
143+
_ = d.Set("log_topic_id", respData.LogTopicId)
144+
_ = d.Set("log_type", "ACCESS")
145+
}
146+
147+
if respData.HealthLogSetId != nil && respData.HealthLogTopicId != nil {
148+
_ = d.Set("log_set_id", respData.HealthLogSetId)
149+
_ = d.Set("log_topic_id", respData.HealthLogTopicId)
150+
_ = d.Set("log_type", "HEALTH")
151+
}
152+
153+
return nil
154+
}
155+
156+
func resourceTencentCloudClbClsLogAttachmentDelete(d *schema.ResourceData, meta interface{}) error {
157+
defer tccommon.LogElapsed("resource.tencentcloud_clb_cls_log_attachment.delete")()
158+
defer tccommon.InconsistentCheck(d, meta)()
159+
160+
var (
161+
logId = tccommon.GetLogId(tccommon.ContextNil)
162+
ctx = tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta)
163+
request = clbv20180317.NewSetLoadBalancerClsLogRequest()
164+
)
165+
166+
idSplit := strings.Split(d.Id(), tccommon.FILED_SP)
167+
if len(idSplit) != 3 {
168+
return fmt.Errorf("id is broken,%s", d.Id())
169+
}
170+
171+
loadBalancerId := idSplit[0]
172+
173+
request.LoadBalancerId = &loadBalancerId
174+
request.LogSetId = helper.String("")
175+
request.LogTopicId = helper.String("")
176+
reqErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
177+
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient().SetLoadBalancerClsLogWithContext(ctx, request)
178+
if e != nil {
179+
return tccommon.RetryError(e)
180+
} else {
181+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
182+
}
183+
184+
return nil
185+
})
186+
187+
if reqErr != nil {
188+
log.Printf("[CRITAL]%s delete clb cls log attachment failed, reason:%+v", logId, reqErr)
189+
return reqErr
190+
}
191+
192+
return nil
193+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
Provides a resource to create a clb clb_cls_log_attachment
2+
3+
Example Usage
4+
5+
```hcl
6+
resource "tencentcloud_clb_cls_log_attachment" "clb_cls_log_attachment" {
7+
}
8+
```
9+
10+
Import
11+
12+
clb clb_cls_log_attachment can be imported using the id, e.g.
13+
14+
```
15+
terraform import tencentcloud_clb_cls_log_attachment.clb_cls_log_attachment clb_cls_log_attachment_id
16+
```
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package clb_test
2+
3+
import (
4+
"testing"
5+
6+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
7+
8+
tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest"
9+
)
10+
11+
func TestAccTencentCloudClbClsLogAttachmentResource_basic(t *testing.T) {
12+
t.Parallel()
13+
resource.Test(t, resource.TestCase{
14+
PreCheck: func() {
15+
tcacctest.AccPreCheck(t)
16+
},
17+
Providers: tcacctest.AccProviders,
18+
Steps: []resource.TestStep{{
19+
Config: testAccClbClsLogAttachment,
20+
Check: resource.ComposeTestCheckFunc(resource.TestCheckResourceAttrSet("tencentcloud_clb_cls_log_attachment.clb_cls_log_attachment", "id")),
21+
}, {
22+
ResourceName: "tencentcloud_clb_cls_log_attachment.clb_cls_log_attachment",
23+
ImportState: true,
24+
ImportStateVerify: true,
25+
}},
26+
})
27+
}
28+
29+
const testAccClbClsLogAttachment = `
30+
31+
resource "tencentcloud_clb_cls_log_attachment" "clb_cls_log_attachment" {
32+
}
33+
`

tencentcloud/services/clb/resource_tc_clb_log_topic.go

Lines changed: 66 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,13 @@ import (
77
"sync"
88

99
tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
10+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
1011
svccls "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cls"
1112

13+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
1214
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
15+
16+
cls "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls/v20201016"
1317
)
1418

1519
var clsActionMu = &sync.Mutex{}
@@ -18,6 +22,7 @@ func ResourceTencentCloudClbLogTopic() *schema.Resource {
1822
return &schema.Resource{
1923
Create: resourceTencentCloudClbInstanceTopicCreate,
2024
Read: resourceTencentCloudClbInstanceTopicRead,
25+
Update: resourceTencentCloudClbInstanceTopicUpdate,
2126
Delete: resourceTencentCloudClbInstanceTopicDelete,
2227
Importer: &schema.ResourceImporter{
2328
State: schema.ImportStatePassthrough,
@@ -36,18 +41,13 @@ func ResourceTencentCloudClbLogTopic() *schema.Resource {
3641
ForceNew: true,
3742
Description: "Log topic of CLB instance.",
3843
},
39-
//"partition_count": {
40-
// Type: schema.TypeInt,
41-
// Optional: true,
42-
// ValidateFunc: tccommon.ValidateIntegerInRange(1, 10),
43-
// Description: "Topic partition count of CLB instance.(Default 1).",
44-
//},
45-
//compute
4644
"status": {
4745
Type: schema.TypeBool,
46+
Optional: true,
4847
Computed: true,
49-
Description: "The status of log topic.",
48+
Description: "The status of log topic. true: enable; false: disable. Default is true.",
5049
},
50+
//compute
5151
"create_time": {
5252
Type: schema.TypeString,
5353
Computed: true,
@@ -88,7 +88,32 @@ func resourceTencentCloudClbInstanceTopicCreate(d *schema.ResourceData, meta int
8888
log.Printf("[CRITAL]%s create clb topic failed, reason:%+v", logId, err)
8989
return err
9090
}
91-
d.SetId(*resp.Response.TopicId)
91+
92+
topicId := *resp.Response.TopicId
93+
d.SetId(topicId)
94+
95+
if v, ok := d.GetOkExists("status"); ok {
96+
if !v.(bool) {
97+
request := cls.NewModifyTopicRequest()
98+
request.TopicId = &topicId
99+
request.Status = helper.Bool(false)
100+
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
101+
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClsClient().ModifyTopic(request)
102+
if e != nil {
103+
return tccommon.RetryError(e)
104+
} else {
105+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
106+
}
107+
108+
return nil
109+
})
110+
111+
if err != nil {
112+
return err
113+
}
114+
}
115+
}
116+
92117
return resourceTencentCloudClbInstanceTopicRead(d, meta)
93118
}
94119

@@ -113,7 +138,39 @@ func resourceTencentCloudClbInstanceTopicRead(d *schema.ResourceData, meta inter
113138
_ = d.Set("create_time", res.CreateTime)
114139
_ = d.Set("status", res.Status)
115140
return nil
141+
}
142+
143+
func resourceTencentCloudClbInstanceTopicUpdate(d *schema.ResourceData, meta interface{}) error {
144+
defer tccommon.LogElapsed("resource.tencentcloud_clb_log_topic.update")()
145+
146+
var (
147+
logId = tccommon.GetLogId(tccommon.ContextNil)
148+
topicId = d.Id()
149+
)
150+
151+
if d.HasChange("status") {
152+
if v, ok := d.GetOkExists("status"); ok {
153+
request := cls.NewModifyTopicRequest()
154+
request.TopicId = &topicId
155+
request.Status = helper.Bool(v.(bool))
156+
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
157+
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClsClient().ModifyTopic(request)
158+
if e != nil {
159+
return tccommon.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+
164+
return nil
165+
})
116166

167+
if err != nil {
168+
return err
169+
}
170+
}
171+
}
172+
173+
return resourceTencentCloudClbInstanceTopicRead(d, meta)
117174
}
118175

119176
func resourceTencentCloudClbInstanceTopicDelete(d *schema.ResourceData, meta interface{}) error {

0 commit comments

Comments
 (0)