Skip to content

Commit 0279c01

Browse files
authored
feat(cls): [119075085] add cls loggets data source (#2775)
* add cls logsets data source * add cls logsets data source
1 parent 06ceb60 commit 0279c01

9 files changed

+437
-0
lines changed

.changelog/2775.txt

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

tencentcloud/provider.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1010,6 +1010,7 @@ func Provider() *schema.Provider {
10101010
"tencentcloud_cls_shipper_tasks": cls.DataSourceTencentCloudClsShipperTasks(),
10111011
"tencentcloud_cls_machines": cls.DataSourceTencentCloudClsMachines(),
10121012
"tencentcloud_cls_machine_group_configs": cls.DataSourceTencentCloudClsMachineGroupConfigs(),
1013+
"tencentcloud_cls_logsets": cls.DataSourceTencentCloudClsLogsets(),
10131014
"tencentcloud_eb_search": eb.DataSourceTencentCloudEbSearch(),
10141015
"tencentcloud_eb_bus": eb.DataSourceTencentCloudEbBus(),
10151016
"tencentcloud_eb_event_rules": eb.DataSourceTencentCloudEbEventRules(),

tencentcloud/provider.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1356,6 +1356,7 @@ Cloud Log Service(CLS)
13561356
tencentcloud_cls_shipper_tasks
13571357
tencentcloud_cls_machines
13581358
tencentcloud_cls_machine_group_configs
1359+
tencentcloud_cls_logsets
13591360

13601361
TencentCloud Lighthouse(Lighthouse)
13611362
Resource
Lines changed: 216 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,216 @@
1+
package cls
2+
3+
import (
4+
"context"
5+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
6+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
7+
cls "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls/v20201016"
8+
tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
9+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
10+
)
11+
12+
func DataSourceTencentCloudClsLogsets() *schema.Resource {
13+
return &schema.Resource{
14+
Read: dataSourceTencentCloudClsLogsetsRead,
15+
Schema: map[string]*schema.Schema{
16+
"filters": {
17+
Optional: true,
18+
MaxItems: 10,
19+
Type: schema.TypeList,
20+
Description: "Query by filter.",
21+
Elem: &schema.Resource{
22+
Schema: map[string]*schema.Schema{
23+
"key": {
24+
Type: schema.TypeString,
25+
Required: true,
26+
Description: "Fields that need to be filtered. Support: `logsetName`, `logsetId`, `tagKey`, `tag:tagKey`.",
27+
},
28+
"values": {
29+
Type: schema.TypeSet,
30+
Required: true,
31+
MaxItems: 5,
32+
Elem: &schema.Schema{Type: schema.TypeString},
33+
Description: "The values that need to be filtered.",
34+
},
35+
},
36+
},
37+
},
38+
// computed
39+
"logsets": {
40+
Computed: true,
41+
Type: schema.TypeList,
42+
Description: "logset lists.",
43+
Elem: &schema.Resource{
44+
Schema: map[string]*schema.Schema{
45+
"logset_id": {
46+
Type: schema.TypeString,
47+
Computed: true,
48+
Description: "Logset Id.",
49+
},
50+
"logset_name": {
51+
Type: schema.TypeString,
52+
Computed: true,
53+
Description: "Logset name.",
54+
},
55+
"create_time": {
56+
Type: schema.TypeString,
57+
Computed: true,
58+
Description: "Create time.",
59+
},
60+
"assumer_name": {
61+
Type: schema.TypeString,
62+
Computed: true,
63+
Description: "Cloud product identification, when the log set is created by another cloud product, this field will display the cloud product name, such as CDN, TKE.",
64+
},
65+
"tags": {
66+
Type: schema.TypeList,
67+
Computed: true,
68+
Description: "Tags.",
69+
Elem: &schema.Resource{
70+
Schema: map[string]*schema.Schema{
71+
"key": {
72+
Type: schema.TypeString,
73+
Computed: true,
74+
Description: "Tag key.",
75+
},
76+
"value": {
77+
Type: schema.TypeString,
78+
Computed: true,
79+
Description: "Tag value.",
80+
},
81+
},
82+
},
83+
},
84+
"topic_count": {
85+
Type: schema.TypeInt,
86+
Computed: true,
87+
Description: "Topic count.",
88+
},
89+
"role_name": {
90+
Type: schema.TypeString,
91+
Computed: true,
92+
Description: "If `assumer_name` is not empty, it indicates the service role that created the log set.",
93+
},
94+
},
95+
},
96+
},
97+
"result_output_file": {
98+
Type: schema.TypeString,
99+
Optional: true,
100+
Description: "Used to save results.",
101+
},
102+
},
103+
}
104+
}
105+
106+
func dataSourceTencentCloudClsLogsetsRead(d *schema.ResourceData, meta interface{}) error {
107+
defer tccommon.LogElapsed("data_source.tencentcloud_cls_logsets.read")()
108+
defer tccommon.InconsistentCheck(d, meta)()
109+
110+
var (
111+
logId = tccommon.GetLogId(tccommon.ContextNil)
112+
ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
113+
service = ClsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
114+
logsets []*cls.LogsetInfo
115+
)
116+
117+
paramMap := make(map[string]interface{})
118+
if v, ok := d.GetOk("filters"); ok {
119+
filtersSet := v.([]interface{})
120+
tmpSet := make([]*cls.Filter, 0, len(filtersSet))
121+
for _, item := range filtersSet {
122+
filter := cls.Filter{}
123+
filterMap := item.(map[string]interface{})
124+
if v, ok := filterMap["key"]; ok {
125+
filter.Key = helper.String(v.(string))
126+
}
127+
128+
if v, ok := filterMap["values"]; ok {
129+
valuesSet := v.(*schema.Set).List()
130+
filter.Values = helper.InterfacesStringsPoint(valuesSet)
131+
}
132+
133+
tmpSet = append(tmpSet, &filter)
134+
}
135+
136+
paramMap["Filters"] = tmpSet
137+
}
138+
139+
err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError {
140+
result, e := service.DescribeClsLogsetsByFilter(ctx, paramMap)
141+
if e != nil {
142+
return tccommon.RetryError(e)
143+
}
144+
145+
logsets = result
146+
return nil
147+
})
148+
149+
if err != nil {
150+
return err
151+
}
152+
153+
ids := make([]string, 0, len(logsets))
154+
tmpList := make([]map[string]interface{}, 0, len(logsets))
155+
if logsets != nil {
156+
for _, logsetInfo := range logsets {
157+
logsetInfoMap := map[string]interface{}{}
158+
if logsetInfo.LogsetId != nil {
159+
logsetInfoMap["logset_id"] = logsetInfo.LogsetId
160+
}
161+
162+
if logsetInfo.LogsetName != nil {
163+
logsetInfoMap["logset_name"] = logsetInfo.LogsetName
164+
}
165+
166+
if logsetInfo.CreateTime != nil {
167+
logsetInfoMap["create_time"] = logsetInfo.CreateTime
168+
}
169+
170+
if logsetInfo.AssumerName != nil {
171+
logsetInfoMap["assumer_name"] = logsetInfo.AssumerName
172+
}
173+
174+
if logsetInfo.Tags != nil {
175+
tagsList := []interface{}{}
176+
for _, tags := range logsetInfo.Tags {
177+
tagsMap := map[string]interface{}{}
178+
if tags.Key != nil {
179+
tagsMap["key"] = tags.Key
180+
}
181+
182+
if tags.Value != nil {
183+
tagsMap["value"] = tags.Value
184+
}
185+
186+
tagsList = append(tagsList, tagsMap)
187+
}
188+
189+
logsetInfoMap["tags"] = tagsList
190+
}
191+
192+
if logsetInfo.TopicCount != nil {
193+
logsetInfoMap["topic_count"] = logsetInfo.TopicCount
194+
}
195+
196+
if logsetInfo.RoleName != nil {
197+
logsetInfoMap["role_name"] = logsetInfo.RoleName
198+
}
199+
200+
ids = append(ids, *logsetInfo.LogsetId)
201+
tmpList = append(tmpList, logsetInfoMap)
202+
}
203+
204+
_ = d.Set("logsets", tmpList)
205+
}
206+
207+
d.SetId(helper.DataResourceIdsHash(ids))
208+
output, ok := d.GetOk("result_output_file")
209+
if ok && output.(string) != "" {
210+
if e := tccommon.WriteToFile(output.(string), tmpList); e != nil {
211+
return e
212+
}
213+
}
214+
215+
return nil
216+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
Use this data source to query detailed information of cls logsets
2+
3+
Example Usage
4+
5+
Query all cls logsets
6+
7+
```hcl
8+
data "tencentcloud_cls_logsets" "logsets" {}
9+
```
10+
11+
Query by filters
12+
13+
```hcl
14+
# Query by `logsetName`
15+
data "tencentcloud_cls_logsets" "logsets" {
16+
filters {
17+
key = "logsetName"
18+
values = ["cls_service_logging"]
19+
}
20+
}
21+
22+
# Query by `logsetId`
23+
data "tencentcloud_cls_logsets" "logsets" {
24+
filters {
25+
key = "logsetId"
26+
values = ["50d499a8-c4c0-4442-aa04-e8aa8a02437d"]
27+
}
28+
}
29+
30+
# Query by `tagKey`
31+
data "tencentcloud_cls_logsets" "logsets" {
32+
filters {
33+
key = "tagKey"
34+
values = ["createdBy"]
35+
}
36+
}
37+
38+
# Query by `tag:tagKey`
39+
data "tencentcloud_cls_logsets" "logsets" {
40+
filters {
41+
key = "tag:createdBy"
42+
values = ["terraform"]
43+
}
44+
}
45+
```
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package cls_test
2+
3+
import (
4+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
5+
tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest"
6+
"testing"
7+
)
8+
9+
// go test -i; go test -test.run TestAccTencentCloudClsLogsetsDataSource_basic -v
10+
func TestAccTencentCloudClsLogsetsDataSource_basic(t *testing.T) {
11+
t.Parallel()
12+
resource.Test(t, resource.TestCase{
13+
PreCheck: func() {
14+
tcacctest.AccPreCheck(t)
15+
},
16+
Providers: tcacctest.AccProviders,
17+
Steps: []resource.TestStep{
18+
{
19+
Config: testAccClsLogsetsDataSource,
20+
Check: resource.ComposeTestCheckFunc(
21+
tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_cls_logsets.logsets"),
22+
),
23+
},
24+
},
25+
})
26+
}
27+
28+
const testAccClsLogsetsDataSource = `
29+
data "tencentcloud_cls_logsets" "logsets" {
30+
filters {
31+
key = "logsetId"
32+
values = ["50d499a8-c4c0-4442-aa04-e8aa8a02437d"]
33+
}
34+
}
35+
`

tencentcloud/services/cls/service_tencentcloud_cls.go

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1160,6 +1160,54 @@ func (me *ClsService) DescribeClsMachineGroupConfigsByFilter(ctx context.Context
11601160
return
11611161
}
11621162

1163+
func (me *ClsService) DescribeClsLogsetsByFilter(ctx context.Context, param map[string]interface{}) (Logsets []*cls.LogsetInfo, errRet error) {
1164+
var (
1165+
logId = tccommon.GetLogId(ctx)
1166+
request = cls.NewDescribeLogsetsRequest()
1167+
)
1168+
1169+
defer func() {
1170+
if errRet != nil {
1171+
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error())
1172+
}
1173+
}()
1174+
1175+
for k, v := range param {
1176+
if k == "Filters" {
1177+
request.Filters = v.([]*cls.Filter)
1178+
}
1179+
}
1180+
1181+
var (
1182+
offset int64 = 0
1183+
limit int64 = 100
1184+
)
1185+
1186+
Logsets = make([]*cls.LogsetInfo, 0)
1187+
for {
1188+
request.Offset = &offset
1189+
request.Limit = &limit
1190+
response, err := me.client.UseClsClient().DescribeLogsets(request)
1191+
if err != nil {
1192+
errRet = err
1193+
return
1194+
}
1195+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
1196+
1197+
if response == nil || len(response.Response.Logsets) < 1 {
1198+
break
1199+
}
1200+
Logsets = append(Logsets, response.Response.Logsets...)
1201+
if len(response.Response.Logsets) < int(limit) {
1202+
break
1203+
}
1204+
1205+
offset += limit
1206+
}
1207+
1208+
return
1209+
}
1210+
11631211
func (me *ClsService) DescribeClsDataTransformById(ctx context.Context, taskId string) (dataTransform *cls.DataTransformTaskInfo, errRet error) {
11641212
logId := tccommon.GetLogId(ctx)
11651213

0 commit comments

Comments
 (0)