Skip to content

Commit eebb2dd

Browse files
authored
feat(aad): add a data source to get unblock quota statistics (#6876)
1 parent 34526f5 commit eebb2dd

File tree

4 files changed

+201
-3
lines changed

4 files changed

+201
-3
lines changed
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
---
2+
subcategory: "Advanced Anti-DDoS"
3+
layout: "huaweicloud"
4+
page_title: "HuaweiCloud: huaweicloud_aad_unblock_quota_statistics"
5+
description: |-
6+
Use this data source to get information about the AAD unblock quota statistics within HuaweiCloud.
7+
---
8+
9+
# huaweicloud_aad_unblock_quota_statistics
10+
11+
Use this data source to get information about the AAD unblock quota statistics within HuaweiCloud.
12+
13+
## Example Usage
14+
15+
```hcl
16+
variable "domain_id" {}
17+
18+
data "huaweicloud_aad_unblock_quota_statistics" "test" {
19+
domain_id = var.domain_id
20+
}
21+
```
22+
23+
## Argument Reference
24+
25+
The following arguments are supported:
26+
27+
* `domain_id` - (Required, String) Specified the account ID of IAM user.
28+
29+
## Attribute Reference
30+
31+
The following attributes are exported:
32+
33+
* `id` - The data source ID.
34+
35+
* `type` - The user type. The valid values are as follows:
36+
+ **common_user**: Indicates common user.
37+
+ **native_protection_user**: Indicates native basic protection user.
38+
39+
* `total_unblocking_quota` - The total unblocking quota.
40+
41+
* `remaining_unblocking_quota` - The remaining unblocking quota.
42+
43+
* `unblocking_quota_today` - The unblocking quota of today.
44+
45+
* `remaining_unblocking_quota_today` - The remaining unblocking quota of today.

huaweicloud/provider.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -452,9 +452,10 @@ func Provider() *schema.Provider {
452452
"huaweicloud_access_analyzers": accessanalyzer.DataSourceAccessAnalyzers(),
453453
"huaweicloud_access_analyzer_archive_rules": accessanalyzer.DataSourceAccessAnalyzerArchiveRules(),
454454

455-
"huaweicloud_aad_instances": aad.DataSourceAADInstances(),
456-
"huaweicloud_aad_black_white_lists": aad.DataSourceAadBlackWhiteLists(),
457-
"huaweicloud_aad_web_protection_policies": aad.DataSourceAadWebProtectionPolicies(),
455+
"huaweicloud_aad_instances": aad.DataSourceAADInstances(),
456+
"huaweicloud_aad_unblock_quota_statistics": aad.DataSourceUnblockQuotaStatistics(),
457+
"huaweicloud_aad_black_white_lists": aad.DataSourceAadBlackWhiteLists(),
458+
"huaweicloud_aad_web_protection_policies": aad.DataSourceAadWebProtectionPolicies(),
458459

459460
"huaweicloud_antiddos_config_ranges": antiddos.DataSourceConfigRanges(),
460461
"huaweicloud_antiddos_weekly_protection_statistics": antiddos.DataSourceWeeklyProtectionStatistics(),
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
package aad
2+
3+
import (
4+
"context"
5+
"strings"
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+
12+
"github.com/chnsz/golangsdk"
13+
14+
"github.com/huaweicloud/terraform-provider-huaweicloud/huaweicloud/config"
15+
"github.com/huaweicloud/terraform-provider-huaweicloud/huaweicloud/utils"
16+
)
17+
18+
// @API AAD GET /v1/unblockservice/{domain_id}/unblock-quota-statistics
19+
func DataSourceUnblockQuotaStatistics() *schema.Resource {
20+
return &schema.Resource{
21+
ReadContext: dataSourceUnblockQuotaStatisticsRead,
22+
23+
Schema: map[string]*schema.Schema{
24+
"domain_id": {
25+
Type: schema.TypeString,
26+
Required: true,
27+
Description: "Specified the account ID of IAM user.",
28+
},
29+
"type": {
30+
Type: schema.TypeString,
31+
Computed: true,
32+
Description: "The user type.",
33+
},
34+
"total_unblocking_quota": {
35+
Type: schema.TypeInt,
36+
Computed: true,
37+
Description: "The total unblocking quota.",
38+
},
39+
"remaining_unblocking_quota": {
40+
Type: schema.TypeInt,
41+
Computed: true,
42+
Description: "The remaining unblocking quota.",
43+
},
44+
"unblocking_quota_today": {
45+
Type: schema.TypeInt,
46+
Computed: true,
47+
Description: "The unblocking quota of today.",
48+
},
49+
"remaining_unblocking_quota_today": {
50+
Type: schema.TypeInt,
51+
Computed: true,
52+
Description: "The remaining unblocking quota of today.",
53+
},
54+
},
55+
}
56+
}
57+
58+
func dataSourceUnblockQuotaStatisticsRead(_ context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
59+
var (
60+
cfg = meta.(*config.Config)
61+
region = cfg.GetRegion(d)
62+
mErr *multierror.Error
63+
)
64+
65+
client, err := cfg.NewServiceClient("aad", region)
66+
if err != nil {
67+
return diag.Errorf("error creating AAD client: %s", err)
68+
}
69+
70+
httpUrl := "v1/unblockservice/{domain_id}/unblock-quota-statistics"
71+
httpUrl = strings.ReplaceAll(httpUrl, "{domain_id}", d.Get("domain_id").(string))
72+
listPath := client.Endpoint + httpUrl
73+
opt := golangsdk.RequestOpts{
74+
KeepResponseBody: true,
75+
MoreHeaders: map[string]string{
76+
"Content-Type": "application/json",
77+
},
78+
}
79+
80+
requestResp, err := client.Request("GET", listPath, &opt)
81+
if err != nil {
82+
return diag.Errorf("error retrieving AAD unblock quota statistics: %s", err)
83+
}
84+
85+
respBody, err := utils.FlattenResponse(requestResp)
86+
if err != nil {
87+
return diag.FromErr(err)
88+
}
89+
90+
id, err := uuid.GenerateUUID()
91+
if err != nil {
92+
return diag.Errorf("unable to generate ID: %s", err)
93+
}
94+
d.SetId(id)
95+
96+
mErr = multierror.Append(
97+
mErr,
98+
d.Set("type", utils.PathSearch("type", respBody, nil)),
99+
d.Set("total_unblocking_quota", utils.PathSearch("total_unblocking_quota", respBody, nil)),
100+
d.Set("remaining_unblocking_quota", utils.PathSearch("remaining_unblocking_quota", respBody, nil)),
101+
d.Set("unblocking_quota_today", utils.PathSearch("unblocking_quota_today", respBody, nil)),
102+
d.Set("remaining_unblocking_quota_today", utils.PathSearch("remaining_unblocking_quota_today", respBody, nil)),
103+
)
104+
return diag.FromErr(mErr.ErrorOrNil())
105+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package antiddos
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 TestAccUnblockQuotaStatisticsDataSource_basic(t *testing.T) {
13+
var (
14+
dataSourceName = "data.huaweicloud_aad_unblock_quota_statistics.test"
15+
dc = acceptance.InitDataSourceCheck(dataSourceName)
16+
)
17+
18+
resource.ParallelTest(t, resource.TestCase{
19+
PreCheck: func() {
20+
acceptance.TestAccPreCheck(t)
21+
// Please prepare domain_id before running this test cases.
22+
acceptance.TestAccPrecheckDomainId(t)
23+
},
24+
ProviderFactories: acceptance.TestAccProviderFactories,
25+
Steps: []resource.TestStep{
26+
{
27+
Config: testUnblockQuotaStatistics_basic(),
28+
Check: resource.ComposeTestCheckFunc(
29+
dc.CheckResourceExists(),
30+
resource.TestCheckResourceAttrSet(dataSourceName, "type"),
31+
resource.TestCheckResourceAttrSet(dataSourceName, "total_unblocking_quota"),
32+
resource.TestCheckResourceAttrSet(dataSourceName, "remaining_unblocking_quota"),
33+
resource.TestCheckResourceAttrSet(dataSourceName, "unblocking_quota_today"),
34+
resource.TestCheckResourceAttrSet(dataSourceName, "remaining_unblocking_quota_today"),
35+
),
36+
},
37+
},
38+
})
39+
}
40+
41+
func testUnblockQuotaStatistics_basic() string {
42+
return fmt.Sprintf(`
43+
data "huaweicloud_aad_unblock_quota_statistics" "test" {
44+
domain_id = "%[1]s"
45+
}
46+
`, acceptance.HW_DOMAIN_ID)
47+
}

0 commit comments

Comments
 (0)