Skip to content

Commit e7d0db1

Browse files
author
greyworld
committed
feat(workspace): add new data source query policy groups
1 parent 6c1291e commit e7d0db1

File tree

4 files changed

+716
-0
lines changed

4 files changed

+716
-0
lines changed
Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
---
2+
subcategory: "Workspace"
3+
layout: "huaweicloud"
4+
page_title: "HuaweiCloud: huaweicloud_workspace_policy_groups"
5+
description: |-
6+
Use this data source to get the list of Workspace policy groups within HuaweiCloud.
7+
---
8+
9+
# huaweicloud_workspace_policy_groups
10+
11+
Use this data source to get the list of Workspace policy groups within HuaweiCloud.
12+
13+
## Example Usage
14+
15+
### Basic Usage
16+
17+
```hcl
18+
data "huaweicloud_workspace_policy_groups" "test" {}
19+
```
20+
21+
### Filter policy groups by priority
22+
23+
```hcl
24+
variable "policy_priority" {}
25+
26+
data "huaweicloud_workspace_policy_groups" "test" {
27+
priority = var.policy_priority
28+
}
29+
```
30+
31+
### Filter policy groups by name
32+
33+
```hcl
34+
variable "policy_group_name" {}
35+
36+
data "huaweicloud_workspace_policy_groups" "test" {
37+
policy_group_name = var.policy_group_name
38+
}
39+
```
40+
41+
## Argument Reference
42+
43+
The following arguments are supported:
44+
45+
* `region` - (Optional, String) Specifies the region in which to query the data source.
46+
If omitted, the provider-level region will be used.
47+
48+
* `policy_group_id` - (Optional, String) Specifies the ID of the policy group.
49+
50+
* `policy_group_name` - (Optional, String) Specifies the name of the policy group.
51+
The name support fuzzy match.
52+
53+
* `priority` - (Optional, Int) Specifies the priority of the policy group.
54+
Defaults to **0**.
55+
56+
* `update_time` - (Optional, String) Specifies the update time of the policy group.
57+
The time format in RFC3339.
58+
59+
* `description` - (Optional, String) Specifies the description of the policy group.
60+
61+
## Attribute Reference
62+
63+
In addition to all arguments above, the following attributes are exported:
64+
65+
* `id` - The data source ID.
66+
67+
* `policy_groups` - The list of policy groups that match the filter parameters.
68+
The [policy_groups](#workspace_policy_groups_attr) structure is documented below.
69+
70+
<a name="workspace_policy_groups_attr"></a>
71+
The `policy_groups` block supports:
72+
73+
* `policy_group_id` - The ID of the policy group.
74+
75+
* `policy_group_name` - The name of the policy group.
76+
77+
* `priority` - The priority of the policy group.
78+
79+
* `update_time` - The update time of the policy group.
80+
81+
* `description` - The description of the policy group.
82+
83+
* `policies` - The policy information.
84+
The [policies](#workspace_policy_groups_policies) structure is documented below.
85+
86+
* `targets` - The list of target objects.
87+
The [targets](#workspace_policy_groups_targets) structure is documented below.
88+
89+
<a name="workspace_policy_groups_policies"></a>
90+
The `policies` block supports:
91+
92+
* `peripherals` - The peripheral device policies, in JSON format.
93+
94+
* `audio` - The audio policies, in JSON format.
95+
96+
* `client` - The client policies, in JSON format.
97+
98+
* `display` - The display policies, in JSON format.
99+
100+
* `file_and_clipboard` - The file and clipboard policies, in JSON format.
101+
102+
* `session` - The session policies, in JSON format.
103+
104+
* `virtual_channel` - The virtual channel policies, in JSON format.
105+
106+
* `watermark` - The watermark policies, in JSON format.
107+
108+
* `keyboard_mouse` - The keyboard and mouse policies, in JSON format.
109+
110+
* `seamless` - The general audio and video bypass policies, in JSON format.
111+
112+
* `personalized_data_mgmt` - The personalized data management policies, in JSON format.
113+
114+
* `custom` - The custom policies, in JSON format.
115+
116+
* `record_audit` - The screen recording audit policies, in JSON format.
117+
118+
<a name="workspace_policy_groups_targets"></a>
119+
The `targets` block supports:
120+
121+
* `target_id` - The ID of the target.
122+
123+
* `target_type` - The type of the target.
124+
125+
* `target_name` - The name of the target.

huaweicloud/provider.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1507,6 +1507,7 @@ func Provider() *schema.Provider {
15071507
"huaweicloud_workspace_desktops": workspace.DataSourceDesktops(),
15081508
"huaweicloud_workspace_desktop_tags": workspace.DataSourceDesktopTags(),
15091509
"huaweicloud_workspace_flavors": workspace.DataSourceWorkspaceFlavors(),
1510+
"huaweicloud_workspace_policy_groups": workspace.DataSourcePolicyGroups(),
15101511
"huaweicloud_workspace_service": workspace.DataSourceService(),
15111512
"huaweicloud_workspace_tags": workspace.DataSourceTags(),
15121513

Lines changed: 229 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,229 @@
1+
package workspace
2+
3+
import (
4+
"fmt"
5+
"regexp"
6+
"testing"
7+
8+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
9+
10+
"github.com/huaweicloud/terraform-provider-huaweicloud/huaweicloud/services/acceptance"
11+
)
12+
13+
func TestAccDataSourcePolicyGroups_basic(t *testing.T) {
14+
var (
15+
name = acceptance.RandomAccResourceName()
16+
17+
dcName = "data.huaweicloud_workspace_policy_groups.all"
18+
dc = acceptance.InitDataSourceCheck(dcName)
19+
20+
filterById = "data.huaweicloud_workspace_policy_groups.filter_by_policy_group_id"
21+
dcFilterById = acceptance.InitDataSourceCheck(filterById)
22+
23+
filterByName = "data.huaweicloud_workspace_policy_groups.filter_by_policy_group_name"
24+
dcFilterByName = acceptance.InitDataSourceCheck(filterByName)
25+
26+
filterByPriority = "data.huaweicloud_workspace_policy_groups.filter_by_priority"
27+
dcFilterByPriority = acceptance.InitDataSourceCheck(filterByPriority)
28+
29+
filterByUpdateTime = "data.huaweicloud_workspace_policy_groups.filter_by_update_time"
30+
dcFilterByUpdateTime = acceptance.InitDataSourceCheck(filterByUpdateTime)
31+
32+
filterByDescription = "data.huaweicloud_workspace_policy_groups.filter_by_description"
33+
dcFilterByDescription = acceptance.InitDataSourceCheck(filterByDescription)
34+
)
35+
36+
resource.Test(t, resource.TestCase{
37+
PreCheck: func() {
38+
acceptance.TestAccPreCheck(t)
39+
},
40+
ProviderFactories: acceptance.TestAccProviderFactories,
41+
Steps: []resource.TestStep{
42+
{
43+
Config: testAccDataSourcePolicyGroups_basic(name),
44+
Check: resource.ComposeTestCheckFunc(
45+
// all
46+
dc.CheckResourceExists(),
47+
resource.TestMatchResourceAttr(dcName, "policy_groups.#", regexp.MustCompile(`^[1-9]([0-9]*)?$`)),
48+
resource.TestCheckResourceAttrSet(dcName, "policy_groups.0.policy_group_id"),
49+
resource.TestCheckResourceAttrSet(dcName, "policy_groups.0.policy_group_name"),
50+
resource.TestCheckResourceAttrSet(dcName, "policy_groups.0.priority"),
51+
resource.TestCheckResourceAttrSet(dcName, "policy_groups.0.update_time"),
52+
// filter by id
53+
dcFilterById.CheckResourceExists(),
54+
resource.TestCheckOutput("is_id_filter_useful", "true"),
55+
// filter by name
56+
dcFilterByName.CheckResourceExists(),
57+
resource.TestCheckOutput("is_name_filter_useful", "true"),
58+
// filter by priority
59+
dcFilterByPriority.CheckResourceExists(),
60+
resource.TestCheckOutput("is_priority_filter_useful", "true"),
61+
// filter by update time
62+
dcFilterByUpdateTime.CheckResourceExists(),
63+
resource.TestCheckOutput("is_update_time_filter_useful", "true"),
64+
// filter by description
65+
dcFilterByDescription.CheckResourceExists(),
66+
resource.TestCheckOutput("is_description_filter_useful", "true"),
67+
),
68+
},
69+
},
70+
})
71+
}
72+
73+
func testAccDataSourcePolicyGroups_basic(name string) string {
74+
return fmt.Sprintf(`
75+
%[1]s
76+
77+
data "huaweicloud_workspace_policy_groups" "all" {
78+
depends_on = [
79+
huaweicloud_workspace_policy_group.test,
80+
huaweicloud_workspace_policy_group.nontest,
81+
]
82+
}
83+
84+
locals {
85+
policy_group_id = data.huaweicloud_workspace_policy_groups.all.policy_groups[0].policy_group_id
86+
policy_group_name = data.huaweicloud_workspace_policy_groups.all.policy_groups[0].policy_group_name
87+
priority = data.huaweicloud_workspace_policy_groups.all.policy_groups[0].priority
88+
update_time = data.huaweicloud_workspace_policy_groups.all.policy_groups[0].update_time
89+
description = data.huaweicloud_workspace_policy_groups.all.policy_groups[0].description
90+
}
91+
92+
# filter by policy group id
93+
data "huaweicloud_workspace_policy_groups" "filter_by_policy_group_id" {
94+
policy_group_id = local.policy_group_id
95+
96+
depends_on = [
97+
huaweicloud_workspace_policy_group.test,
98+
huaweicloud_workspace_policy_group.nontest,
99+
]
100+
}
101+
102+
locals {
103+
id_filter_result = [
104+
for v in data.huaweicloud_workspace_policy_groups.filter_by_policy_group_id.policy_groups[*].policy_group_id :
105+
v == local.policy_group_id
106+
]
107+
}
108+
109+
output "is_id_filter_useful" {
110+
value = length(local.id_filter_result) < 2 && alltrue(local.id_filter_result)
111+
}
112+
113+
# filter by policy group name
114+
data "huaweicloud_workspace_policy_groups" "filter_by_policy_group_name" {
115+
policy_group_name = local.policy_group_name
116+
117+
depends_on = [
118+
huaweicloud_workspace_policy_group.test,
119+
huaweicloud_workspace_policy_group.nontest,
120+
]
121+
}
122+
123+
output "is_name_filter_useful" {
124+
value = length(data.huaweicloud_workspace_policy_groups.filter_by_policy_group_name.policy_groups) > 0
125+
}
126+
127+
# filter by priority
128+
data "huaweicloud_workspace_policy_groups" "filter_by_priority" {
129+
priority = local.priority
130+
131+
depends_on = [
132+
huaweicloud_workspace_policy_group.test,
133+
huaweicloud_workspace_policy_group.nontest,
134+
]
135+
}
136+
137+
locals {
138+
priority_filter_result = [
139+
for v in data.huaweicloud_workspace_policy_groups.filter_by_priority.policy_groups[*].priority :
140+
v == local.priority
141+
]
142+
}
143+
144+
output "is_priority_filter_useful" {
145+
value = length(local.priority_filter_result) > 0 && alltrue(local.priority_filter_result)
146+
}
147+
148+
# filter by update time
149+
data "huaweicloud_workspace_policy_groups" "filter_by_update_time" {
150+
update_time = local.update_time
151+
152+
depends_on = [
153+
huaweicloud_workspace_policy_group.test,
154+
huaweicloud_workspace_policy_group.nontest,
155+
]
156+
}
157+
158+
output "is_update_time_filter_useful" {
159+
value = length(data.huaweicloud_workspace_policy_groups.filter_by_update_time.policy_groups) > 0
160+
}
161+
162+
# filter by description
163+
data "huaweicloud_workspace_policy_groups" "filter_by_description" {
164+
description = local.description
165+
166+
depends_on = [
167+
huaweicloud_workspace_policy_group.test,
168+
huaweicloud_workspace_policy_group.nontest,
169+
]
170+
}
171+
172+
locals {
173+
description_filter_result = [
174+
for v in data.huaweicloud_workspace_policy_groups.filter_by_description.policy_groups[*].description :
175+
v == local.description
176+
]
177+
}
178+
179+
output "is_description_filter_useful" {
180+
value = length(local.description_filter_result) > 0 && alltrue(local.description_filter_result)
181+
}
182+
`, testAccDataSourcePolicyGroups_base(name))
183+
}
184+
185+
func testAccDataSourcePolicyGroups_base(name string) string {
186+
return fmt.Sprintf(`
187+
locals {
188+
user_name = "terraform"
189+
email_address = "[email protected]"
190+
policy_name = "%[1]s"
191+
nontest_policy_name = "non_%[1]s"
192+
}
193+
194+
resource "huaweicloud_workspace_user" "test" {
195+
name = local.user_name
196+
email = local.email_address
197+
}
198+
199+
resource "huaweicloud_workspace_policy_group" "test" {
200+
name = local.policy_name
201+
202+
targets {
203+
type = "USER"
204+
id = huaweicloud_workspace_user.test.id
205+
name = huaweicloud_workspace_user.test.name
206+
}
207+
policy {
208+
access_control {
209+
ip_access_control = "112.20.53.2|255.255.240.0;112.20.53.3|255.255.240.0"
210+
}
211+
}
212+
}
213+
214+
resource "huaweicloud_workspace_policy_group" "nontest" {
215+
name = local.nontest_policy_name
216+
217+
targets {
218+
type = "USER"
219+
id = huaweicloud_workspace_user.test.id
220+
name = huaweicloud_workspace_user.test.name
221+
}
222+
policy {
223+
access_control {
224+
ip_access_control = "112.20.53.2|255.255.240.0;112.20.53.3|255.255.240.0"
225+
}
226+
}
227+
}
228+
`, name)
229+
}

0 commit comments

Comments
 (0)