Skip to content

Commit 3bb3c2c

Browse files
authored
add as datasource (#1867)
* add as datasource * add changelog * update as
1 parent 808704c commit 3bb3c2c

21 files changed

+2130
-67
lines changed

.changelog/1867.txt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
```release-note:new-data-source
2+
tencentcloud_as_advices
3+
```
4+
5+
```release-note:new-data-source
6+
tencentcloud_as_limits
7+
```
8+
9+
```release-note:new-data-source
10+
tencentcloud_as_last_activity
11+
```

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ require (
2626
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/api v1.0.285
2727
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/apigateway v1.0.571
2828
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/apm v1.0.624
29-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/as v1.0.466
29+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/as v1.0.655
3030
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam v1.0.409
3131
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cat v1.0.520
3232
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cbs v1.0.591

go.sum

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -776,8 +776,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/apigateway v1.0.571 h1:
776776
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/apigateway v1.0.571/go.mod h1:G0Uj96Y8P0AUdB2zAwhEJ53FiDr+kZSJTllaaXu4K/k=
777777
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/apm v1.0.624 h1:AXDRZPPJ1dD5NpIU9C+Rh8wgvlqT2RsZPmcWCH24rrs=
778778
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/apm v1.0.624/go.mod h1:ONtHJxQQsy6nuRdsnGj6X9G5/+a+EJdt1EtckvyVIS4=
779-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/as v1.0.466 h1:JnE62AvMprCOe1/cnLJvjgeBoUOGxhdc0DG2mhs8cjo=
780-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/as v1.0.466/go.mod h1:NBTNnh4SpOTGvr69Ttt4ABQplvwt6eEZXSmO5f9Anf0=
779+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/as v1.0.655 h1:6UbJtqoDPCcqvax/KFu6Yfj7kMw+0k3QSlqx2N2+c/g=
780+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/as v1.0.655/go.mod h1:oObEUtcSyaZ/T6z1KMEdR2C/DXL0rSMKG31qamYH4vw=
781781
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam v1.0.409 h1:ToZpNh78SVdKakkeR9YV1a65tjtC4NJl+hrJqTuhO3g=
782782
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam v1.0.409/go.mod h1:U24yUxCDruJLayOsP/onO2E/7+9ljeNsNO+phu+PeiM=
783783
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cat v1.0.520 h1:n4FN0PI+1MVWi+RGQbD/cElXjquZQK0K1h1Z1nNWNWw=
@@ -805,7 +805,6 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.358/go.mod
805805
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.383/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
806806
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.409/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
807807
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.414/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
808-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.466/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
809808
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.486/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
810809
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.514/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
811810
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.520/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
@@ -836,6 +835,7 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.644/go.mod
836835
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.650/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
837836
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.651/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
838837
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.652/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
838+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.655/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
839839
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.656/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
840840
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.657/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
841841
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.658/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
@@ -860,8 +860,6 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dbbrain v1.0.652 h1:agj
860860
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dbbrain v1.0.652/go.mod h1:BG3Gc+jfiea3NAnmUgrYcRHmh/1ykye3k8iwKVm+KLQ=
861861
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dc v1.0.633 h1:Ul5iNhXoBrrzguMdbFzTDf3lfl15QrKbvOhvVBiqxDI=
862862
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dc v1.0.633/go.mod h1:tc6Hvf03M1cBtMC1IKSa5mlOn3kpxWOwhWU1fRy+KEE=
863-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dcdb v1.0.572 h1:Yn1ZzciHvRg1V694c70VSZQ9tzbgZHrInvlpqE/M7wM=
864-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dcdb v1.0.572/go.mod h1:+kYEqwZE8OlDhFMsb6hu0PD9CXQJOOnju2xOAUHp/dk=
865863
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dcdb v1.0.670 h1:rydm5AO6/1eOuBvnm8vsUyZGatnopWYDPxuxLYsKzg8=
866864
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dcdb v1.0.670/go.mod h1:F8W8ZhpF/mCm8if/302HXQ4vLEixW+pNJYfyaVDjQ08=
867865
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.539 h1:V+oo20w9aLxAoSSEGVplke2kq72MdUA4OuagCv4gsiY=
Lines changed: 172 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,172 @@
1+
/*
2+
Use this data source to query detailed information of as advices
3+
4+
Example Usage
5+
6+
```hcl
7+
data "tencentcloud_as_advices" "advices" {
8+
auto_scaling_group_ids = ["asc-lo0b94oy"]
9+
}
10+
```
11+
*/
12+
package tencentcloud
13+
14+
import (
15+
"context"
16+
17+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
18+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
19+
as "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/as/v20180419"
20+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
21+
)
22+
23+
func dataSourceTencentCloudAsAdvices() *schema.Resource {
24+
return &schema.Resource{
25+
Read: dataSourceTencentCloudAsAdvicesRead,
26+
Schema: map[string]*schema.Schema{
27+
"auto_scaling_group_ids": {
28+
Required: true,
29+
Type: schema.TypeSet,
30+
Elem: &schema.Schema{
31+
Type: schema.TypeString,
32+
},
33+
Description: "List of scaling groups to be queried. Upper limit: 100.",
34+
},
35+
36+
"auto_scaling_advice_set": {
37+
Computed: true,
38+
Type: schema.TypeList,
39+
Description: "A collection of suggestions for scaling group configurations.",
40+
Elem: &schema.Resource{
41+
Schema: map[string]*schema.Schema{
42+
"auto_scaling_group_id": {
43+
Type: schema.TypeString,
44+
Computed: true,
45+
Description: "Auto scaling group ID.",
46+
},
47+
"level": {
48+
Type: schema.TypeString,
49+
Computed: true,
50+
Description: "Scaling group warning level. Valid values: NORMAL, WARNING, CRITICAL.",
51+
},
52+
"advices": {
53+
Type: schema.TypeList,
54+
Computed: true,
55+
Description: "A collection of suggestions for scaling group configurations.",
56+
Elem: &schema.Resource{
57+
Schema: map[string]*schema.Schema{
58+
"problem": {
59+
Type: schema.TypeString,
60+
Computed: true,
61+
Description: "Problem Description.",
62+
},
63+
"detail": {
64+
Type: schema.TypeString,
65+
Computed: true,
66+
Description: "Problem Details.",
67+
},
68+
"solution": {
69+
Type: schema.TypeString,
70+
Computed: true,
71+
Description: "Recommended resolutions.",
72+
},
73+
},
74+
},
75+
},
76+
},
77+
},
78+
},
79+
80+
"result_output_file": {
81+
Type: schema.TypeString,
82+
Optional: true,
83+
Description: "Used to save results.",
84+
},
85+
},
86+
}
87+
}
88+
89+
func dataSourceTencentCloudAsAdvicesRead(d *schema.ResourceData, meta interface{}) error {
90+
defer logElapsed("data_source.tencentcloud_as_advices.read")()
91+
defer inconsistentCheck(d, meta)()
92+
93+
logId := getLogId(contextNil)
94+
95+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
96+
97+
paramMap := make(map[string]interface{})
98+
if v, ok := d.GetOk("auto_scaling_group_ids"); ok {
99+
autoScalingGroupIdsSet := v.(*schema.Set).List()
100+
paramMap["AutoScalingGroupIds"] = helper.InterfacesStringsPoint(autoScalingGroupIdsSet)
101+
}
102+
103+
service := AsService{client: meta.(*TencentCloudClient).apiV3Conn}
104+
105+
var autoScalingAdviceSet []*as.AutoScalingAdvice
106+
107+
err := resource.Retry(readRetryTimeout, func() *resource.RetryError {
108+
result, e := service.DescribeAsAdvices(ctx, paramMap)
109+
if e != nil {
110+
return retryError(e)
111+
}
112+
autoScalingAdviceSet = result
113+
return nil
114+
})
115+
if err != nil {
116+
return err
117+
}
118+
119+
ids := make([]string, 0, len(autoScalingAdviceSet))
120+
tmpList := make([]map[string]interface{}, 0, len(autoScalingAdviceSet))
121+
122+
if autoScalingAdviceSet != nil {
123+
for _, autoScalingAdvice := range autoScalingAdviceSet {
124+
autoScalingAdviceMap := map[string]interface{}{}
125+
126+
if autoScalingAdvice.AutoScalingGroupId != nil {
127+
autoScalingAdviceMap["auto_scaling_group_id"] = autoScalingAdvice.AutoScalingGroupId
128+
}
129+
130+
if autoScalingAdvice.Level != nil {
131+
autoScalingAdviceMap["level"] = autoScalingAdvice.Level
132+
}
133+
134+
if autoScalingAdvice.Advices != nil {
135+
advicesList := []interface{}{}
136+
for _, advices := range autoScalingAdvice.Advices {
137+
advicesMap := map[string]interface{}{}
138+
139+
if advices.Problem != nil {
140+
advicesMap["problem"] = advices.Problem
141+
}
142+
143+
if advices.Detail != nil {
144+
advicesMap["detail"] = advices.Detail
145+
}
146+
147+
if advices.Solution != nil {
148+
advicesMap["solution"] = advices.Solution
149+
}
150+
151+
advicesList = append(advicesList, advicesMap)
152+
}
153+
154+
autoScalingAdviceMap["advices"] = []interface{}{advicesList}
155+
}
156+
157+
ids = append(ids, *autoScalingAdvice.AutoScalingGroupId)
158+
tmpList = append(tmpList, autoScalingAdviceMap)
159+
}
160+
161+
_ = d.Set("auto_scaling_advice_set", tmpList)
162+
}
163+
164+
d.SetId(helper.DataResourceIdsHash(ids))
165+
output, ok := d.GetOk("result_output_file")
166+
if ok && output.(string) != "" {
167+
if e := writeToFile(output.(string), tmpList); e != nil {
168+
return e
169+
}
170+
}
171+
return nil
172+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package tencentcloud
2+
3+
import (
4+
"testing"
5+
6+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
7+
)
8+
9+
func TestAccTencentCloudAsAdvicesDataSource_basic(t *testing.T) {
10+
t.Parallel()
11+
resource.Test(t, resource.TestCase{
12+
PreCheck: func() {
13+
testAccPreCheck(t)
14+
},
15+
Providers: testAccProviders,
16+
Steps: []resource.TestStep{
17+
{
18+
Config: testAccAsAdvicesDataSource,
19+
Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_as_advices.advices")),
20+
},
21+
},
22+
})
23+
}
24+
25+
const testAccAsAdvicesDataSource = `
26+
27+
data "tencentcloud_as_advices" "advices" {
28+
auto_scaling_group_ids = ["asc-lo0b94oy"]
29+
}
30+
31+
`

0 commit comments

Comments
 (0)