Skip to content

Commit c881c67

Browse files
feat(evs/hss_event_unblock_ip): support hss_event_unblock_ip data source (#7012)
1 parent b24bd0e commit c881c67

File tree

5 files changed

+427
-1
lines changed

5 files changed

+427
-1
lines changed

.github/workflows/doc-lint.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ jobs:
6969
github_token: ${{ secrets.github_token }}
7070
locale: "US"
7171
ignore: |
72-
analyses,cancelled,classis,cancelling
72+
analyses,cancelled,classis,cancelling,
7373
pattern: |
7474
*.md
7575
*.tf
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
---
2+
subcategory: "Host Security Service (HSS)"
3+
layout: "huaweicloud"
4+
page_title: "HuaweiCloud: huaweicloud_hss_event_unblock_ips"
5+
description: |-
6+
Use this data source to get the list of HSS unblock IPs within HuaweiCloud.
7+
---
8+
9+
# huaweicloud_hss_event_unblock_ips
10+
11+
Use this data source to get the list of HSS unblock IPs within HuaweiCloud.
12+
13+
## Example Usage
14+
15+
```hcl
16+
data "huaweicloud_hss_event_unblock_ips" "test" {}
17+
```
18+
19+
## Argument Reference
20+
21+
The following arguments are supported:
22+
23+
* `region` - (Optional, String) Specifies the region in which to query the resource.
24+
If omitted, the provider-level region will be used.
25+
26+
* `last_days` - (Optional, Int) Specifies the query time range and number of days.
27+
28+
* `host_name` - (Optional, String) Specifies the host name.
29+
30+
* `src_ip` - (Optional, String) Specifies the IP address of the attack source.
31+
32+
* `intercept_status` - (Optional, String) Specifies interception status.
33+
The valid values are as follows:
34+
+ **intercepted**: Indicates that it has been intercepted.
35+
+ **canceled**: Indicates that it has been unblocked.
36+
+ **cancelling**: Indicates pending unblock.
37+
38+
* `enterprise_project_id` - (Optional, String) Specifies the enterprise project ID to which the hosts
39+
belong.
40+
This parameter is valid only when the enterprise project is enabled.
41+
The default value is **0**, indicating the default enterprise project.
42+
If you need to query data for all enterprise projects, the value is **all_granted_eps**.
43+
If you only have permissions for a specific enterprise project, you need set the enterprise project ID. Otherwise,
44+
the operation may fail due to insufficient permissions.
45+
46+
## Attribute Reference
47+
48+
In addition to all arguments above, the following attributes are exported:
49+
50+
* `id` - The data source ID in UUID format.
51+
52+
* `data_list` - The details of intercepted IP list.
53+
The [data_list](#data_list_struct) structure is documented below.
54+
55+
<a name="data_list_struct"></a>
56+
The `data_list` block supports:
57+
58+
* `host_id` - The host ID.
59+
60+
* `host_name` - The host name.
61+
62+
* `src_ip` - The IP address of the attack source.
63+
64+
* `login_type` - The login type.
65+
The valid values are as follows:
66+
+ **mysql**: Represents the MySQL service.
67+
+ **rdp**: Represents the RDP service.
68+
+ **ssh**: Represents the SSH service.
69+
+ **vsftp**: Represents the VSFTP service.
70+
71+
* `intercept_num` - The number of interceptions.
72+
73+
* `intercept_status` - The interception status.
74+
75+
* `block_time` - The start interception time in milliseconds.
76+
77+
* `latest_time` - The most recent interception time in milliseconds.

huaweicloud/provider.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1028,6 +1028,7 @@ func Provider() *schema.Provider {
10281028
"huaweicloud_hss_app_statistics": hss.DataSourceAppStatistics(),
10291029
"huaweicloud_hss_resource_quotas": hss.DataSourceResourceQuotas(),
10301030
"huaweicloud_hss_auto_launch_statistics": hss.DataSourceAutoLaunchStatistics(),
1031+
"huaweicloud_hss_event_unblock_ips": hss.DataSourceEventUnblockIps(),
10311032

10321033
"huaweicloud_identity_permissions": iam.DataSourceIdentityPermissions(),
10331034
"huaweicloud_identity_role": iam.DataSourceIdentityRole(),
Lines changed: 157 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,157 @@
1+
package hss
2+
3+
import (
4+
"fmt"
5+
"testing"
6+
7+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
8+
9+
"github.com/huaweicloud/terraform-provider-huaweicloud/huaweicloud/services/acceptance"
10+
)
11+
12+
func TestAccDataSourceEventUnblockIps_basic(t *testing.T) {
13+
var (
14+
dataSource = "data.huaweicloud_hss_event_unblock_ips.test"
15+
dc = acceptance.InitDataSourceCheck(dataSource)
16+
)
17+
18+
resource.ParallelTest(t, resource.TestCase{
19+
PreCheck: func() {
20+
acceptance.TestAccPreCheck(t)
21+
// This test case requires setting a host ID with host protection enabled,
22+
// and the host is under the default enterprise project.
23+
acceptance.TestAccPreCheckHSSHostProtectionHostId(t)
24+
},
25+
ProviderFactories: acceptance.TestAccProviderFactories,
26+
Steps: []resource.TestStep{
27+
{
28+
Config: testDataSourceEventUnblockIps_basic(),
29+
Check: resource.ComposeTestCheckFunc(
30+
dc.CheckResourceExists(),
31+
resource.TestCheckResourceAttrSet(dataSource, "data_list.#"),
32+
resource.TestCheckResourceAttrSet(dataSource, "data_list.0.host_id"),
33+
resource.TestCheckResourceAttrSet(dataSource, "data_list.0.host_name"),
34+
resource.TestCheckResourceAttrSet(dataSource, "data_list.0.src_ip"),
35+
resource.TestCheckResourceAttrSet(dataSource, "data_list.0.login_type"),
36+
resource.TestCheckResourceAttrSet(dataSource, "data_list.0.intercept_num"),
37+
resource.TestCheckResourceAttrSet(dataSource, "data_list.0.intercept_status"),
38+
resource.TestCheckResourceAttrSet(dataSource, "data_list.0.block_time"),
39+
resource.TestCheckResourceAttrSet(dataSource, "data_list.0.latest_time"),
40+
41+
resource.TestCheckOutput("is_last_days_filter_useful", "true"),
42+
resource.TestCheckOutput("is_host_name_filter_useful", "true"),
43+
resource.TestCheckOutput("is_src_ip_filter_useful", "true"),
44+
resource.TestCheckOutput("is_intercept_status_filter_useful", "true"),
45+
resource.TestCheckOutput("is_enterprise_project_id_filter_useful", "true"),
46+
resource.TestCheckOutput("not_found_validation_pass", "true"),
47+
),
48+
},
49+
},
50+
})
51+
}
52+
53+
func testDataSourceEventUnblockIps_base() string {
54+
return fmt.Sprintf(`
55+
resource "huaweicloud_hss_event_unblock_ip" "test" {
56+
data_list {
57+
host_id = "%[1]s"
58+
src_ip = "127.0.0.1"
59+
login_type = "mysql"
60+
}
61+
62+
data_list {
63+
host_id = "%[1]s"
64+
src_ip = "127.0.0.2"
65+
login_type = "mysql"
66+
}
67+
}
68+
`, acceptance.HW_HSS_HOST_PROTECTION_HOST_ID)
69+
}
70+
71+
func testDataSourceEventUnblockIps_basic() string {
72+
return fmt.Sprintf(`
73+
%s
74+
75+
data "huaweicloud_hss_event_unblock_ips" "test" {
76+
depends_on = [huaweicloud_hss_event_unblock_ip.test]
77+
}
78+
79+
# Filter using last_days.
80+
data "huaweicloud_hss_event_unblock_ips" "last_days_filter" {
81+
depends_on = [huaweicloud_hss_event_unblock_ip.test]
82+
83+
last_days = 1
84+
}
85+
86+
output "is_last_days_filter_useful" {
87+
value = length(data.huaweicloud_hss_event_unblock_ips.last_days_filter.data_list) > 0
88+
}
89+
90+
# Filter using host_name.
91+
locals {
92+
host_name = data.huaweicloud_hss_event_unblock_ips.test.data_list[0].host_name
93+
}
94+
95+
data "huaweicloud_hss_event_unblock_ips" "host_name_filter" {
96+
host_name = local.host_name
97+
}
98+
99+
output "is_host_name_filter_useful" {
100+
value = length(data.huaweicloud_hss_event_unblock_ips.host_name_filter.data_list) > 0 && alltrue(
101+
[for v in data.huaweicloud_hss_event_unblock_ips.host_name_filter.data_list[*].host_name : v == local.host_name]
102+
)
103+
}
104+
105+
# Filter using src_ip.
106+
locals {
107+
src_ip = data.huaweicloud_hss_event_unblock_ips.test.data_list[0].src_ip
108+
}
109+
110+
data "huaweicloud_hss_event_unblock_ips" "src_ip_filter" {
111+
src_ip = local.src_ip
112+
}
113+
114+
output "is_src_ip_filter_useful" {
115+
value = length(data.huaweicloud_hss_event_unblock_ips.src_ip_filter.data_list) > 0 && alltrue(
116+
[for v in data.huaweicloud_hss_event_unblock_ips.src_ip_filter.data_list[*].src_ip : v == local.src_ip]
117+
)
118+
}
119+
120+
# Filter using intercept_status.
121+
locals {
122+
intercept_status = data.huaweicloud_hss_event_unblock_ips.test.data_list[0].intercept_status
123+
}
124+
125+
data "huaweicloud_hss_event_unblock_ips" "intercept_status_filter" {
126+
intercept_status = local.intercept_status
127+
}
128+
129+
output "is_intercept_status_filter_useful" {
130+
value = length(data.huaweicloud_hss_event_unblock_ips.intercept_status_filter.data_list) > 0 && alltrue(
131+
[for v in data.huaweicloud_hss_event_unblock_ips.intercept_status_filter.data_list[*].intercept_status : v == local.intercept_status]
132+
)
133+
}
134+
135+
# Filter using enterprise_project_id.
136+
data "huaweicloud_hss_event_unblock_ips" "enterprise_project_id_filter" {
137+
depends_on = [huaweicloud_hss_event_unblock_ip.test]
138+
139+
enterprise_project_id = "0"
140+
}
141+
142+
output "is_enterprise_project_id_filter_useful" {
143+
value = length(data.huaweicloud_hss_event_unblock_ips.enterprise_project_id_filter.data_list) > 0
144+
}
145+
146+
# Filter using non existent enterprise_project_id.
147+
data "huaweicloud_hss_event_unblock_ips" "not_found" {
148+
depends_on = [huaweicloud_hss_event_unblock_ip.test]
149+
150+
enterprise_project_id = "1"
151+
}
152+
153+
output "not_found_validation_pass" {
154+
value = length(data.huaweicloud_hss_event_unblock_ips.not_found.data_list) == 0
155+
}
156+
`, testDataSourceEventUnblockIps_base())
157+
}

0 commit comments

Comments
 (0)