Skip to content

Commit 05c224a

Browse files
authored
feat(teo): [117892609] support realtime_log_delivery (#2697)
* feat(teo): [117892609] support realtime_log_delivery * feat: add changelog and doc
1 parent 7c93a93 commit 05c224a

10 files changed

+1564
-0
lines changed

.changelog/2697.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:new-resource
2+
tencentcloud_teo_realtime_log_delivery
3+
```

tencentcloud/provider.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1556,6 +1556,7 @@ func Provider() *schema.Provider {
15561556
"tencentcloud_teo_acceleration_domain": teo.ResourceTencentCloudTeoAccelerationDomain(),
15571557
"tencentcloud_teo_application_proxy": teo.ResourceTencentCloudTeoApplicationProxy(),
15581558
"tencentcloud_teo_application_proxy_rule": teo.ResourceTencentCloudTeoApplicationProxyRule(),
1559+
"tencentcloud_teo_realtime_log_delivery": teo.ResourceTencentCloudTeoRealtimeLogDelivery(),
15591560
"tencentcloud_tcm_mesh": tcm.ResourceTencentCloudTcmMesh(),
15601561
"tencentcloud_tcm_cluster_attachment": tcm.ResourceTencentCloudTcmClusterAttachment(),
15611562
"tencentcloud_tcm_prometheus_attachment": tcm.ResourceTencentCloudTcmPrometheusAttachment(),

tencentcloud/provider.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1407,6 +1407,7 @@ TencentCloud EdgeOne(TEO)
14071407
tencentcloud_teo_certificate_config
14081408
tencentcloud_teo_acceleration_domain
14091409
tencentcloud_teo_l4_proxy
1410+
tencentcloud_teo_realtime_log_delivery
14101411

14111412
TencentCloud ServiceMesh(TCM)
14121413
Data Source

tencentcloud/services/teo/resource_tc_teo_realtime_log_delivery.go

Lines changed: 1065 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
Provides a resource to create a teo teo_realtime_log_delivery
2+
3+
Example Usage
4+
5+
```hcl
6+
resource "tencentcloud_teo_realtime_log_delivery" "teo_realtime_log_delivery" {
7+
area = "overseas"
8+
delivery_status = "disabled"
9+
entity_list = [
10+
"sid-2yvhjw98uaco",
11+
]
12+
fields = [
13+
"ServiceID",
14+
"ConnectTimeStamp",
15+
"DisconnetTimeStamp",
16+
"DisconnetReason",
17+
"ClientRealIP",
18+
"ClientRegion",
19+
"EdgeIP",
20+
"ForwardProtocol",
21+
"ForwardPort",
22+
"SentBytes",
23+
"ReceivedBytes",
24+
"LogTimeStamp",
25+
]
26+
log_type = "application"
27+
sample = 0
28+
task_name = "test"
29+
task_type = "s3"
30+
zone_id = "zone-2qtuhspy7cr6"
31+
32+
log_format {
33+
field_delimiter = ","
34+
format_type = "json"
35+
record_delimiter = "\n"
36+
record_prefix = "{"
37+
record_suffix = "}"
38+
}
39+
40+
s3 {
41+
access_id = "xxxxxxxxxx"
42+
access_key = "xxxxxxxxxx"
43+
bucket = "test-1253833068"
44+
compress_type = "gzip"
45+
endpoint = "https://test-1253833068.cos.ap-nanjing.myqcloud.com"
46+
region = "ap-nanjing"
47+
}
48+
}
49+
```
50+
51+
Import
52+
53+
teo teo_realtime_log_delivery can be imported using the id, e.g.
54+
55+
```
56+
terraform import tencentcloud_teo_realtime_log_delivery.teo_realtime_log_delivery zoneId#taskId
57+
```
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
package teo
2+
3+
import (
4+
"context"
5+
"fmt"
6+
7+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
8+
teo "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/teo/v20220901"
9+
10+
tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
11+
)
12+
13+
func resourceTencentCloudTeoRealtimeLogDeliveryCreatePostHandleResponse0(ctx context.Context, resp *teo.CreateRealtimeLogDeliveryTaskResponse) error {
14+
taskId := *resp.Response.TaskId
15+
return checkRealtimeLogDeliveryStatus(ctx, taskId, "enabled")
16+
}
17+
18+
func resourceTencentCloudTeoRealtimeLogDeliveryUpdatePostHandleResponse0(ctx context.Context, resp *teo.ModifyRealtimeLogDeliveryTaskResponse) error {
19+
d := tccommon.ResourceDataFromContext(ctx)
20+
if d == nil {
21+
return fmt.Errorf("resource data can not be nil")
22+
}
23+
var taskId string
24+
if v, ok := d.GetOk("task_id"); ok {
25+
taskId = v.(string)
26+
}
27+
return checkRealtimeLogDeliveryStatus(ctx, taskId, "update")
28+
}
29+
30+
func resourceTencentCloudTeoRealtimeLogDeliveryDeletePostHandleResponse0(ctx context.Context, resp *teo.DeleteRealtimeLogDeliveryTaskResponse) error {
31+
d := tccommon.ResourceDataFromContext(ctx)
32+
if d == nil {
33+
return fmt.Errorf("resource data can not be nil")
34+
}
35+
var taskId string
36+
if v, ok := d.GetOk("task_id"); ok {
37+
taskId = v.(string)
38+
}
39+
return checkRealtimeLogDeliveryStatus(ctx, taskId, "deleted")
40+
}
41+
42+
func checkRealtimeLogDeliveryStatus(ctx context.Context, taskId string, expectedStatuses ...string) error {
43+
d := tccommon.ResourceDataFromContext(ctx)
44+
if d == nil {
45+
return fmt.Errorf("resource data can not be nil")
46+
}
47+
meta := tccommon.ProviderMetaFromContext(ctx)
48+
if meta == nil {
49+
return fmt.Errorf("provider meta can not be nil")
50+
}
51+
52+
var zoneId string
53+
if v, ok := d.GetOk("zone_id"); ok {
54+
zoneId = v.(string)
55+
}
56+
57+
if v, ok := d.GetOk("delivery_status"); ok && expectedStatuses[0] == "update" {
58+
expectedStatuses = append(expectedStatuses, v.(string))
59+
}
60+
61+
service := TeoService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
62+
return resource.Retry(6*tccommon.ReadRetryTimeout, func() *resource.RetryError {
63+
instance, errRet := service.DescribeTeoRealtimeLogDeliveryById(ctx, zoneId, taskId)
64+
if errRet != nil {
65+
return tccommon.RetryError(errRet, tccommon.InternalError)
66+
}
67+
68+
if instance == nil {
69+
if expectedStatuses[0] != "deleted" {
70+
return resource.NonRetryableError(fmt.Errorf("RealtimeLogDeliveryTask data not found, taskId: %v", taskId))
71+
}
72+
return nil
73+
}
74+
75+
for _, s := range expectedStatuses {
76+
if s == *instance.DeliveryStatus {
77+
return nil
78+
}
79+
}
80+
81+
return resource.RetryableError(fmt.Errorf("RealtimeLogDeliveryTask status is %v, retry...", *instance.DeliveryStatus))
82+
})
83+
}
Lines changed: 164 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,164 @@
1+
package teo_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 TestAccTencentCloudTeoRealtimeLogDeliveryResource_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+
{
20+
Config: testAccTeoRealtimeLogDelivery,
21+
Check: resource.ComposeTestCheckFunc(
22+
resource.TestCheckResourceAttrSet("tencentcloud_teo_realtime_log_delivery.teo_realtime_log_delivery", "id"),
23+
resource.TestCheckResourceAttr("tencentcloud_teo_realtime_log_delivery.teo_realtime_log_delivery", "area", "overseas"),
24+
resource.TestCheckResourceAttr("tencentcloud_teo_realtime_log_delivery.teo_realtime_log_delivery", "delivery_status", "enabled"),
25+
resource.TestCheckResourceAttr("tencentcloud_teo_realtime_log_delivery.teo_realtime_log_delivery", "entity_list.#", "1"),
26+
resource.TestCheckResourceAttrSet("tencentcloud_teo_realtime_log_delivery.teo_realtime_log_delivery", "fields.#"),
27+
resource.TestCheckResourceAttr("tencentcloud_teo_realtime_log_delivery.teo_realtime_log_delivery", "log_type", "application"),
28+
resource.TestCheckResourceAttr("tencentcloud_teo_realtime_log_delivery.teo_realtime_log_delivery", "sample", "0"),
29+
resource.TestCheckResourceAttr("tencentcloud_teo_realtime_log_delivery.teo_realtime_log_delivery", "task_name", "test"),
30+
resource.TestCheckResourceAttr("tencentcloud_teo_realtime_log_delivery.teo_realtime_log_delivery", "task_type", "s3"),
31+
resource.TestCheckResourceAttr("tencentcloud_teo_realtime_log_delivery.teo_realtime_log_delivery", "log_format.#", "1"),
32+
resource.TestCheckResourceAttr("tencentcloud_teo_realtime_log_delivery.teo_realtime_log_delivery", "s3.#", "1"),
33+
resource.TestCheckResourceAttrSet("tencentcloud_teo_realtime_log_delivery.teo_realtime_log_delivery", "s3.0.access_id"),
34+
resource.TestCheckResourceAttrSet("tencentcloud_teo_realtime_log_delivery.teo_realtime_log_delivery", "s3.0.access_key"),
35+
resource.TestCheckResourceAttrSet("tencentcloud_teo_realtime_log_delivery.teo_realtime_log_delivery", "s3.0.bucket"),
36+
resource.TestCheckResourceAttrSet("tencentcloud_teo_realtime_log_delivery.teo_realtime_log_delivery", "s3.0.compress_type"),
37+
resource.TestCheckResourceAttrSet("tencentcloud_teo_realtime_log_delivery.teo_realtime_log_delivery", "s3.0.endpoint"),
38+
resource.TestCheckResourceAttrSet("tencentcloud_teo_realtime_log_delivery.teo_realtime_log_delivery", "s3.0.region"),
39+
),
40+
},
41+
{
42+
ResourceName: "tencentcloud_teo_realtime_log_delivery.teo_realtime_log_delivery",
43+
ImportState: true,
44+
ImportStateVerify: true,
45+
},
46+
{
47+
Config: testAccTeoRealtimeLogDeliveryUp,
48+
Check: resource.ComposeTestCheckFunc(
49+
resource.TestCheckResourceAttrSet("tencentcloud_teo_realtime_log_delivery.teo_realtime_log_delivery", "id"),
50+
resource.TestCheckResourceAttr("tencentcloud_teo_realtime_log_delivery.teo_realtime_log_delivery", "area", "overseas"),
51+
resource.TestCheckResourceAttr("tencentcloud_teo_realtime_log_delivery.teo_realtime_log_delivery", "delivery_status", "disabled"),
52+
resource.TestCheckResourceAttr("tencentcloud_teo_realtime_log_delivery.teo_realtime_log_delivery", "entity_list.#", "1"),
53+
resource.TestCheckResourceAttrSet("tencentcloud_teo_realtime_log_delivery.teo_realtime_log_delivery", "fields.#"),
54+
resource.TestCheckResourceAttr("tencentcloud_teo_realtime_log_delivery.teo_realtime_log_delivery", "log_type", "application"),
55+
resource.TestCheckResourceAttr("tencentcloud_teo_realtime_log_delivery.teo_realtime_log_delivery", "sample", "0"),
56+
resource.TestCheckResourceAttr("tencentcloud_teo_realtime_log_delivery.teo_realtime_log_delivery", "task_name", "test"),
57+
resource.TestCheckResourceAttr("tencentcloud_teo_realtime_log_delivery.teo_realtime_log_delivery", "task_type", "s3"),
58+
resource.TestCheckResourceAttr("tencentcloud_teo_realtime_log_delivery.teo_realtime_log_delivery", "log_format.#", "1"),
59+
resource.TestCheckResourceAttr("tencentcloud_teo_realtime_log_delivery.teo_realtime_log_delivery", "s3.#", "1"),
60+
resource.TestCheckResourceAttrSet("tencentcloud_teo_realtime_log_delivery.teo_realtime_log_delivery", "s3.0.access_id"),
61+
resource.TestCheckResourceAttrSet("tencentcloud_teo_realtime_log_delivery.teo_realtime_log_delivery", "s3.0.access_key"),
62+
resource.TestCheckResourceAttrSet("tencentcloud_teo_realtime_log_delivery.teo_realtime_log_delivery", "s3.0.bucket"),
63+
resource.TestCheckResourceAttrSet("tencentcloud_teo_realtime_log_delivery.teo_realtime_log_delivery", "s3.0.compress_type"),
64+
resource.TestCheckResourceAttrSet("tencentcloud_teo_realtime_log_delivery.teo_realtime_log_delivery", "s3.0.endpoint"),
65+
resource.TestCheckResourceAttrSet("tencentcloud_teo_realtime_log_delivery.teo_realtime_log_delivery", "s3.0.region"),
66+
),
67+
},
68+
},
69+
})
70+
}
71+
72+
const testAccTeoRealtimeLogDelivery = `
73+
74+
resource "tencentcloud_teo_realtime_log_delivery" "teo_realtime_log_delivery" {
75+
area = "overseas"
76+
delivery_status = "enabled"
77+
entity_list = [
78+
"sid-2yvhjw98uaco",
79+
]
80+
fields = [
81+
"ServiceID",
82+
"ConnectTimeStamp",
83+
"DisconnetTimeStamp",
84+
"DisconnetReason",
85+
"ClientRealIP",
86+
"ClientRegion",
87+
"EdgeIP",
88+
"ForwardProtocol",
89+
"ForwardPort",
90+
"SentBytes",
91+
"ReceivedBytes",
92+
"LogTimeStamp",
93+
]
94+
log_type = "application"
95+
sample = 0
96+
task_name = "test"
97+
task_type = "s3"
98+
zone_id = "zone-2qtuhspy7cr6"
99+
100+
log_format {
101+
field_delimiter = ","
102+
format_type = "json"
103+
record_delimiter = "\n"
104+
record_prefix = "{"
105+
record_suffix = "}"
106+
}
107+
108+
s3 {
109+
access_id = "xxxxxxxxxx"
110+
access_key = "xxxxxxxxxx"
111+
bucket = "test-1253833068"
112+
compress_type = "gzip"
113+
endpoint = "https://test-1253833068.cos.ap-nanjing.myqcloud.com"
114+
region = "ap-nanjing"
115+
}
116+
}
117+
`
118+
119+
const testAccTeoRealtimeLogDeliveryUp = `
120+
121+
resource "tencentcloud_teo_realtime_log_delivery" "teo_realtime_log_delivery" {
122+
area = "overseas"
123+
delivery_status = "disabled"
124+
entity_list = [
125+
"sid-2yvhjw98uaco",
126+
]
127+
fields = [
128+
"ServiceID",
129+
"ConnectTimeStamp",
130+
"DisconnetTimeStamp",
131+
"DisconnetReason",
132+
"ClientRealIP",
133+
"ClientRegion",
134+
"EdgeIP",
135+
"ForwardProtocol",
136+
"ForwardPort",
137+
"SentBytes",
138+
"ReceivedBytes",
139+
"LogTimeStamp",
140+
]
141+
log_type = "application"
142+
sample = 0
143+
task_name = "test"
144+
task_type = "s3"
145+
zone_id = "zone-2qtuhspy7cr6"
146+
147+
log_format {
148+
field_delimiter = ","
149+
format_type = "json"
150+
record_delimiter = "\n"
151+
record_prefix = "{"
152+
record_suffix = "}"
153+
}
154+
155+
s3 {
156+
access_id = "xxxxxxxxxx"
157+
access_key = "xxxxxxxxxx"
158+
bucket = "test-1253833068"
159+
compress_type = "gzip"
160+
endpoint = "https://test-1253833068.cos.ap-nanjing.myqcloud.com"
161+
region = "ap-nanjing"
162+
}
163+
}
164+
`

tencentcloud/services/teo/service_tencentcloud_teo.go

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1104,3 +1104,37 @@ func (me *TeoService) DescribeTeoL4ProxyById(ctx context.Context, zoneId string,
11041104
ret = response.Response.L4Proxies[0]
11051105
return
11061106
}
1107+
1108+
func (me *TeoService) DescribeTeoRealtimeLogDeliveryById(ctx context.Context, zoneId string, taskId string) (ret *teo.RealtimeLogDeliveryTask, errRet error) {
1109+
logId := tccommon.GetLogId(ctx)
1110+
1111+
request := teo.NewDescribeRealtimeLogDeliveryTasksRequest()
1112+
request.ZoneId = helper.String(zoneId)
1113+
advancedFilter := &teo.AdvancedFilter{
1114+
Name: helper.String("task-id"),
1115+
Values: []*string{helper.String(taskId)},
1116+
}
1117+
request.Filters = append(request.Filters, advancedFilter)
1118+
1119+
defer func() {
1120+
if errRet != nil {
1121+
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error())
1122+
}
1123+
}()
1124+
1125+
ratelimit.Check(request.GetAction())
1126+
1127+
response, err := me.client.UseTeoClient().DescribeRealtimeLogDeliveryTasks(request)
1128+
if err != nil {
1129+
errRet = err
1130+
return
1131+
}
1132+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
1133+
1134+
if len(response.Response.RealtimeLogDeliveryTasks) < 1 {
1135+
return
1136+
}
1137+
1138+
ret = response.Response.RealtimeLogDeliveryTasks[0]
1139+
return
1140+
}

0 commit comments

Comments
 (0)