Skip to content

Commit 518da0f

Browse files
feat(vpc): add new data_source secgroup tags
1 parent 302dd54 commit 518da0f

File tree

5 files changed

+318
-0
lines changed

5 files changed

+318
-0
lines changed
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
---
2+
subcategory: "Virtual Private Cloud (VPC)"
3+
layout: "huaweicloud"
4+
page_title: "HuaweiCloud: huaweicloud_networking_secgroup_tags"
5+
description: |-
6+
Use this data source to get the list of security group project tags.
7+
---
8+
9+
# huaweicloud_networking_secgroup_tags
10+
11+
Use this data source to get the list of security group project tags.
12+
13+
## Example Usage
14+
15+
```hcl
16+
data "huaweicloud_networking_secgroup_tags" "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+
## Attribute Reference
27+
28+
In addition to all arguments above, the following attributes are exported:
29+
30+
* `id` - The data source ID.
31+
32+
* `tags` - The list of tags
33+
34+
The [tags](#tags_struct) structure is documented below.
35+
36+
<a name="tags_struct"></a>
37+
The `tags` block supports:
38+
39+
* `key` - The tag key.
40+
41+
* `values` - The tag values.

huaweicloud/provider.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1082,6 +1082,7 @@ func Provider() *schema.Provider {
10821082
"huaweicloud_networking_secgroup": vpc.DataSourceNetworkingSecGroup(),
10831083
"huaweicloud_networking_secgroups": vpc.DataSourceNetworkingSecGroups(),
10841084
"huaweicloud_networking_secgroup_rules": vpc.DataSourceNetworkingSecGroupRules(),
1085+
"huaweicloud_networking_secgroup_tags": vpc.DataSourceVpcNetworkingSecgroupTags(),
10851086

10861087
"huaweicloud_mapreduce_versions": mrs.DataSourceMrsVersions(),
10871088

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package vpc
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 TestAccDataSourceVpcNetworkingSecgroupTags_basic(t *testing.T) {
13+
dataSource := "data.huaweicloud_networking_secgroup_tags.test"
14+
rName := acceptance.RandomAccResourceName()
15+
dc := acceptance.InitDataSourceCheck(dataSource)
16+
17+
resource.ParallelTest(t, resource.TestCase{
18+
PreCheck: func() {
19+
acceptance.TestAccPreCheck(t)
20+
},
21+
ProviderFactories: acceptance.TestAccProviderFactories,
22+
Steps: []resource.TestStep{
23+
{
24+
Config: testDataSourceDataSourceVpcNetworkingSecgroupTags_basic(rName),
25+
Check: resource.ComposeTestCheckFunc(
26+
dc.CheckResourceExists(),
27+
resource.TestCheckOutput("is_results_not_empty", "true"),
28+
),
29+
},
30+
},
31+
})
32+
}
33+
34+
func testDataSourceDataSourceVpcNetworkingSecgroupTags_basic(name string) string {
35+
return fmt.Sprintf(`
36+
%s
37+
38+
data "huaweicloud_networking_secgroup_tags" "test" {
39+
depends_on = [ huaweicloud_networking_secgroup.secgroup_1 ]
40+
}
41+
42+
output "is_results_not_empty" {
43+
value = length(data.huaweicloud_networking_secgroup_tags.test.tags) > 0
44+
}
45+
`, testAccSecGroup_basic(name))
46+
}
Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
// Generated by PMS #598
2+
package vpc
3+
4+
import (
5+
"context"
6+
7+
"github.com/hashicorp/go-multierror"
8+
"github.com/hashicorp/go-uuid"
9+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
10+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
11+
"github.com/tidwall/gjson"
12+
13+
"github.com/huaweicloud/terraform-provider-huaweicloud/huaweicloud/config"
14+
"github.com/huaweicloud/terraform-provider-huaweicloud/huaweicloud/helper/httphelper"
15+
"github.com/huaweicloud/terraform-provider-huaweicloud/huaweicloud/helper/schemas"
16+
)
17+
18+
func DataSourceVpcNetwokingSecgroupTags() *schema.Resource {
19+
return &schema.Resource{
20+
ReadContext: dataSourceVpcNetwokingSecgroupTagsRead,
21+
22+
Schema: map[string]*schema.Schema{
23+
"region": {
24+
Type: schema.TypeString,
25+
Optional: true,
26+
Computed: true,
27+
Description: `Specifies the region in which to query the resource. If omitted, the provider-level region will be used.`,
28+
},
29+
"tags": {
30+
Type: schema.TypeList,
31+
Computed: true,
32+
Description: `The list of tags`,
33+
Elem: &schema.Resource{
34+
Schema: map[string]*schema.Schema{
35+
"key": {
36+
Type: schema.TypeString,
37+
Computed: true,
38+
Description: `The tag key.`,
39+
},
40+
"values": {
41+
Type: schema.TypeList,
42+
Computed: true,
43+
Elem: &schema.Schema{Type: schema.TypeString},
44+
Description: `The tag values.`,
45+
},
46+
},
47+
},
48+
},
49+
},
50+
}
51+
}
52+
53+
type NetwokingSecgroupTagsDSWrapper struct {
54+
*schemas.ResourceDataWrapper
55+
Config *config.Config
56+
}
57+
58+
func newNetwokingSecgroupTagsDSWrapper(d *schema.ResourceData, meta interface{}) *NetwokingSecgroupTagsDSWrapper {
59+
return &NetwokingSecgroupTagsDSWrapper{
60+
ResourceDataWrapper: schemas.NewSchemaWrapper(d),
61+
Config: meta.(*config.Config),
62+
}
63+
}
64+
65+
func dataSourceVpcNetwokingSecgroupTagsRead(_ context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
66+
wrapper := newNetwokingSecgroupTagsDSWrapper(d, meta)
67+
lisSecGroTagRst, err := wrapper.ListSecurityGroupTags()
68+
if err != nil {
69+
return diag.FromErr(err)
70+
}
71+
72+
id, err := uuid.GenerateUUID()
73+
if err != nil {
74+
return diag.FromErr(err)
75+
}
76+
d.SetId(id)
77+
78+
err = wrapper.listSecurityGroupTagsToSchema(lisSecGroTagRst)
79+
if err != nil {
80+
return diag.FromErr(err)
81+
}
82+
83+
return nil
84+
}
85+
86+
// @API VPC GET /v2.0/{project_id}/security-groups/tags
87+
func (w *NetwokingSecgroupTagsDSWrapper) ListSecurityGroupTags() (*gjson.Result, error) {
88+
client, err := w.NewClient(w.Config, "vpc")
89+
if err != nil {
90+
return nil, err
91+
}
92+
93+
uri := "/v2.0/{project_id}/security-groups/tags"
94+
return httphelper.New(client).
95+
Method("GET").
96+
URI(uri).
97+
Request().
98+
Result()
99+
}
100+
101+
func (w *NetwokingSecgroupTagsDSWrapper) listSecurityGroupTagsToSchema(body *gjson.Result) error {
102+
d := w.ResourceData
103+
mErr := multierror.Append(nil,
104+
d.Set("region", w.Config.GetRegion(w.ResourceData)),
105+
d.Set("tags", schemas.SliceToList(body.Get("tags"),
106+
func(tags gjson.Result) any {
107+
return map[string]any{
108+
"key": tags.Get("key").Value(),
109+
"values": schemas.SliceToStrList(tags.Get("values")),
110+
}
111+
},
112+
)),
113+
)
114+
return mErr.ErrorOrNil()
115+
}
Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
// Generated by PMS #598
2+
package vpc
3+
4+
import (
5+
"context"
6+
7+
"github.com/hashicorp/go-multierror"
8+
"github.com/hashicorp/go-uuid"
9+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
10+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
11+
"github.com/tidwall/gjson"
12+
13+
"github.com/huaweicloud/terraform-provider-huaweicloud/huaweicloud/config"
14+
"github.com/huaweicloud/terraform-provider-huaweicloud/huaweicloud/helper/httphelper"
15+
"github.com/huaweicloud/terraform-provider-huaweicloud/huaweicloud/helper/schemas"
16+
)
17+
18+
func DataSourceVpcNetworkingSecgroupTags() *schema.Resource {
19+
return &schema.Resource{
20+
ReadContext: dataSourceVpcNetworkingSecgroupTagsRead,
21+
22+
Schema: map[string]*schema.Schema{
23+
"region": {
24+
Type: schema.TypeString,
25+
Optional: true,
26+
Computed: true,
27+
Description: `Specifies the region in which to query the resource. If omitted, the provider-level region will be used.`,
28+
},
29+
"tags": {
30+
Type: schema.TypeList,
31+
Computed: true,
32+
Description: `The list of tags`,
33+
Elem: &schema.Resource{
34+
Schema: map[string]*schema.Schema{
35+
"key": {
36+
Type: schema.TypeString,
37+
Computed: true,
38+
Description: `The tag key.`,
39+
},
40+
"values": {
41+
Type: schema.TypeList,
42+
Computed: true,
43+
Elem: &schema.Schema{Type: schema.TypeString},
44+
Description: `The tag values.`,
45+
},
46+
},
47+
},
48+
},
49+
},
50+
}
51+
}
52+
53+
type NetworkingSecgroupTagsDSWrapper struct {
54+
*schemas.ResourceDataWrapper
55+
Config *config.Config
56+
}
57+
58+
func newNetworkingSecgroupTagsDSWrapper(d *schema.ResourceData, meta interface{}) *NetworkingSecgroupTagsDSWrapper {
59+
return &NetworkingSecgroupTagsDSWrapper{
60+
ResourceDataWrapper: schemas.NewSchemaWrapper(d),
61+
Config: meta.(*config.Config),
62+
}
63+
}
64+
65+
func dataSourceVpcNetworkingSecgroupTagsRead(_ context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
66+
wrapper := newNetworkingSecgroupTagsDSWrapper(d, meta)
67+
lisSecGroTagRst, err := wrapper.ListSecurityGroupTags()
68+
if err != nil {
69+
return diag.FromErr(err)
70+
}
71+
72+
id, err := uuid.GenerateUUID()
73+
if err != nil {
74+
return diag.FromErr(err)
75+
}
76+
d.SetId(id)
77+
78+
err = wrapper.listSecurityGroupTagsToSchema(lisSecGroTagRst)
79+
if err != nil {
80+
return diag.FromErr(err)
81+
}
82+
83+
return nil
84+
}
85+
86+
// @API VPC GET /v2.0/{project_id}/security-groups/tags
87+
func (w *NetworkingSecgroupTagsDSWrapper) ListSecurityGroupTags() (*gjson.Result, error) {
88+
client, err := w.NewClient(w.Config, "vpc")
89+
if err != nil {
90+
return nil, err
91+
}
92+
93+
uri := "/v2.0/{project_id}/security-groups/tags"
94+
return httphelper.New(client).
95+
Method("GET").
96+
URI(uri).
97+
Request().
98+
Result()
99+
}
100+
101+
func (w *NetworkingSecgroupTagsDSWrapper) listSecurityGroupTagsToSchema(body *gjson.Result) error {
102+
d := w.ResourceData
103+
mErr := multierror.Append(nil,
104+
d.Set("region", w.Config.GetRegion(w.ResourceData)),
105+
d.Set("tags", schemas.SliceToList(body.Get("tags"),
106+
func(tags gjson.Result) any {
107+
return map[string]any{
108+
"key": tags.Get("key").Value(),
109+
"values": schemas.SliceToStrList(tags.Get("values")),
110+
}
111+
},
112+
)),
113+
)
114+
return mErr.ErrorOrNil()
115+
}

0 commit comments

Comments
 (0)