Skip to content

Commit 3d19ba1

Browse files
Feat/antiddos datasource (#2335)
* add antiddos datasource * add changelog 2329.txt * update param c_l_b_data to clb_data * add antiddos datacource doc * add changelog 2335.txt * docs(ddos): changelog merge --------- Co-authored-by: andrewjiang <andrewjiang@tencent.com>
1 parent b4fad8a commit 3d19ba1

24 files changed

+8383
-3142
lines changed

.changelog/2335.txt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
```release-note:new-datasource
2+
tencentcloud_antiddos_basic_device_status
3+
```
4+
5+
```release-note:new-datasource
6+
tencentcloud_antiddos_bgp_biz_trend
7+
```
8+
9+
```release-note:new-datasource
10+
tencentcloud_antiddos_list_listener
11+
```
12+
13+
```release-note:new-datasource
14+
tencentcloud_antiddos_overview_attack_trend
15+
```
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
data "tencentcloud_antiddos_basic_device_status" "basic_device_status" {
2+
ip_list = [
3+
"127.0.0.1"
4+
]
5+
filter_region = 1
6+
}
7+
8+
data "tencentcloud_antiddos_bgp_biz_trend" "bgp_biz_trend" {
9+
business = "bgp-multip"
10+
start_time = "2023-11-22 09:25:00"
11+
end_time = "2023-11-22 10:25:00"
12+
metric_name = "intraffic"
13+
instance_id = "bgp-00000ry7"
14+
flag = 0
15+
}
16+
17+
data "tencentcloud_antiddos_list_listener" "list_listener" {
18+
}
19+
20+
data "tencentcloud_antiddos_overview_attack_trend" "overview_attack_trend" {
21+
type = "ddos"
22+
dimension = "attackcount"
23+
period = 86400
24+
start_time = "2023-11-21 10:28:31"
25+
end_time = "2023-11-22 10:28:31"
26+
}

examples/tencentcloud-antiddos/variables.tf

Whitespace-only changes.
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
terraform {
2+
required_version = ">= 0.12"
3+
}

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ require (
2626
github.com/pkg/errors v0.9.1
2727
github.com/stretchr/testify v1.8.2
2828
github.com/tencentcloud/tencentcloud-sdk-go-intl-en v3.0.646+incompatible
29-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/antiddos v1.0.358
29+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/antiddos v1.0.799
3030
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/api v1.0.285
3131
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/apigateway v1.0.763
3232
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/apm v1.0.624

go.sum

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -776,6 +776,8 @@ github.com/tencentcloud/tencentcloud-sdk-go-intl-en v3.0.646+incompatible h1:C6k
776776
github.com/tencentcloud/tencentcloud-sdk-go-intl-en v3.0.646+incompatible/go.mod h1:72Wo6Gt6F8d8V+njrAmduVoT9QjPwCyXktpqCWr7PUc=
777777
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/antiddos v1.0.358 h1:U/3fxCDsKPEFRM7uYtSiIuR/PxeuuY4w2VkP892G+5Q=
778778
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/antiddos v1.0.358/go.mod h1:oTPWRp1MbE4umgAHAUCogWxTdE6Uu50rL4b8HKIO1d8=
779+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/antiddos v1.0.799 h1:u49r1bGFDY0CeAF46iotNnLtc5yplPf9XXa7W7zJ4fE=
780+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/antiddos v1.0.799/go.mod h1:JQa/Ess7Kkn/BuAugq0Tt5GJR7ZQAY47ypP9LjEn/DE=
779781
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/api v1.0.285 h1:gFmukRGLtYiXVBVvg/5DP/0fM1+dKpwDjT+khtDVLmc=
780782
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/api v1.0.285/go.mod h1:aGlXSWjtSnE6kuqcaRy/NKj1CLiB8NlMSHGsDn+k7Ag=
781783
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/apigateway v1.0.763 h1:jNjM/+MU2HplNZpCxDBIBKXZzumIDFJ4ztYHob0thow=
@@ -869,7 +871,10 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.775/go.mod
869871
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.777/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
870872
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.779/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
871873
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.781/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
874+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.788 h1:H3OCwvAHQSgphJNjAM6JhlKT1x83WF4uu6qahWTR1dE=
875+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.788/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
872876
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.792/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
877+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.794 h1:UZNzwFi22p+MPZNPcYMFniQcG0H05fFCXHyqsmx904U=
873878
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.794/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
874879
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.797/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
875880
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.798/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
Lines changed: 179 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,179 @@
1+
/*
2+
Use this data source to query detailed information of antiddos basic_device_status
3+
4+
Example Usage
5+
6+
```hcl
7+
data "tencentcloud_antiddos_basic_device_status" "basic_device_status" {
8+
ip_list = [
9+
"127.0.0.1"
10+
]
11+
filter_region = 1
12+
}
13+
```
14+
*/
15+
package tencentcloud
16+
17+
import (
18+
"context"
19+
20+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
21+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
22+
antiddos "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/antiddos/v20200309"
23+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
24+
)
25+
26+
func dataSourceTencentCloudAntiddosBasicDeviceStatus() *schema.Resource {
27+
return &schema.Resource{
28+
Read: dataSourceTencentCloudAntiddosBasicDeviceStatusRead,
29+
Schema: map[string]*schema.Schema{
30+
"ip_list": {
31+
Optional: true,
32+
Type: schema.TypeSet,
33+
Elem: &schema.Schema{
34+
Type: schema.TypeString,
35+
},
36+
Description: "Ip resource list.",
37+
},
38+
39+
"id_list": {
40+
Optional: true,
41+
Type: schema.TypeSet,
42+
Elem: &schema.Schema{
43+
Type: schema.TypeString,
44+
},
45+
Description: "Named resource transfer ID.",
46+
},
47+
48+
"filter_region": {
49+
Optional: true,
50+
Type: schema.TypeInt,
51+
Description: "Region Id.",
52+
},
53+
54+
"data": {
55+
Computed: true,
56+
Type: schema.TypeList,
57+
Description: "Return resources and status, status code: 1- Blocking status 2- Normal status 3- Attack status.",
58+
Elem: &schema.Resource{
59+
Schema: map[string]*schema.Schema{
60+
"key": {
61+
Type: schema.TypeString,
62+
Computed: true,
63+
Description: "Properties name.",
64+
},
65+
"value": {
66+
Type: schema.TypeString,
67+
Computed: true,
68+
Description: "Properties value.",
69+
},
70+
},
71+
},
72+
},
73+
74+
"clb_data": {
75+
Computed: true,
76+
Type: schema.TypeList,
77+
Description: "Note: This field may return null, indicating that a valid value cannot be obtained.",
78+
Elem: &schema.Resource{
79+
Schema: map[string]*schema.Schema{
80+
"key": {
81+
Type: schema.TypeString,
82+
Computed: true,
83+
Description: "Properties name.",
84+
},
85+
"value": {
86+
Type: schema.TypeString,
87+
Computed: true,
88+
Description: "Properties value.",
89+
},
90+
},
91+
},
92+
},
93+
94+
"result_output_file": {
95+
Type: schema.TypeString,
96+
Optional: true,
97+
Description: "Used to save results.",
98+
},
99+
},
100+
}
101+
}
102+
103+
func dataSourceTencentCloudAntiddosBasicDeviceStatusRead(d *schema.ResourceData, meta interface{}) error {
104+
defer logElapsed("data_source.tencentcloud_antiddos_basic_device_status.read")()
105+
defer inconsistentCheck(d, meta)()
106+
107+
logId := getLogId(contextNil)
108+
109+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
110+
111+
paramMap := make(map[string]interface{})
112+
if v, ok := d.GetOk("ip_list"); ok {
113+
ipListSet := v.(*schema.Set).List()
114+
paramMap["IpList"] = helper.InterfacesStringsPoint(ipListSet)
115+
}
116+
117+
if v, ok := d.GetOk("id_list"); ok {
118+
idListSet := v.(*schema.Set).List()
119+
paramMap["IdList"] = helper.InterfacesStringsPoint(idListSet)
120+
}
121+
122+
if v, ok := d.GetOkExists("filter_region"); ok {
123+
paramMap["FilterRegion"] = helper.IntUint64(v.(int))
124+
}
125+
126+
service := AntiddosService{client: meta.(*TencentCloudClient).apiV3Conn}
127+
128+
var basicDeviceStatus *antiddos.DescribeBasicDeviceStatusResponseParams
129+
err := resource.Retry(readRetryTimeout, func() *resource.RetryError {
130+
result, e := service.DescribeAntiddosBasicDeviceStatusByFilter(ctx, paramMap)
131+
if e != nil {
132+
return retryError(e)
133+
}
134+
basicDeviceStatus = result
135+
return nil
136+
})
137+
if err != nil {
138+
return err
139+
}
140+
141+
tmpList := make([]map[string]interface{}, 0)
142+
143+
if basicDeviceStatus.Data != nil {
144+
for _, keyValue := range basicDeviceStatus.Data {
145+
keyValueMap := map[string]interface{}{}
146+
if keyValue.Key != nil {
147+
keyValueMap["key"] = keyValue.Key
148+
}
149+
if keyValue.Value != nil {
150+
keyValueMap["value"] = keyValue.Value
151+
}
152+
tmpList = append(tmpList, keyValueMap)
153+
}
154+
_ = d.Set("data", tmpList)
155+
}
156+
157+
if basicDeviceStatus.CLBData != nil {
158+
for _, keyValue := range basicDeviceStatus.CLBData {
159+
keyValueMap := map[string]interface{}{}
160+
if keyValue.Key != nil {
161+
keyValueMap["key"] = keyValue.Key
162+
}
163+
if keyValue.Value != nil {
164+
keyValueMap["value"] = keyValue.Value
165+
}
166+
tmpList = append(tmpList, keyValueMap)
167+
}
168+
_ = d.Set("clb_data", tmpList)
169+
}
170+
171+
d.SetId(helper.BuildToken())
172+
output, ok := d.GetOk("result_output_file")
173+
if ok && output.(string) != "" {
174+
if e := writeToFile(output.(string), tmpList); e != nil {
175+
return e
176+
}
177+
}
178+
return nil
179+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package tencentcloud
2+
3+
import (
4+
"testing"
5+
6+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
7+
)
8+
9+
func TestAccTencentCloudAntiddosBasicDeviceStatusDataSource_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: testAccAntiddosBasicDeviceStatusDataSource,
19+
Check: resource.ComposeTestCheckFunc(
20+
testAccCheckTencentCloudDataSourceID("data.tencentcloud_antiddos_basic_device_status.basic_device_status"),
21+
resource.TestCheckResourceAttrSet("data.tencentcloud_antiddos_basic_device_status.basic_device_status", "data.#"),
22+
resource.TestCheckResourceAttrSet("data.tencentcloud_antiddos_basic_device_status.basic_device_status", "clb_data.#"),
23+
resource.TestCheckResourceAttr("data.tencentcloud_antiddos_basic_device_status.basic_device_status", "data.0.key", "127.0.0.1"),
24+
),
25+
},
26+
},
27+
})
28+
}
29+
30+
const testAccAntiddosBasicDeviceStatusDataSource = `
31+
32+
data "tencentcloud_antiddos_basic_device_status" "basic_device_status" {
33+
ip_list = [
34+
"127.0.0.1"
35+
]
36+
filter_region = 1
37+
}
38+
39+
`

0 commit comments

Comments
 (0)