Skip to content

Commit 9e314b7

Browse files
committed
feat(dws): add new datasource to query schemas
1 parent d2e977d commit 9e314b7

File tree

4 files changed

+387
-14
lines changed

4 files changed

+387
-14
lines changed
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
---
2+
subcategory: "GaussDB(DWS)"
3+
layout: "huaweicloud"
4+
page_title: "HuaweiCloud: huaweicloud_dws_schema_space_managements"
5+
description: |-
6+
Use this data source to get the list of schema space management information of the DWS Cluster within HuaweiCloud.
7+
---
8+
9+
# huaweicloud_dws_schema_space_managements
10+
11+
Use this data source to get the list of schema space management information of the DWS Cluster within HuaweiCloud.
12+
13+
## Example Usage
14+
15+
```hcl
16+
variable "dws_cluster_id" {}
17+
variable "database_name" {}
18+
19+
data "huaweicloud_dws_schema_space_managements" "test" {
20+
cluster_id = var.dws_cluster_id
21+
database_name = var.database_name
22+
}
23+
```
24+
25+
## Argument Reference
26+
27+
The following arguments are supported:
28+
29+
* `region` - (Optional, String) Specifies the region in which to query the resource.
30+
If omitted, the provider-level region will be used.
31+
32+
* `cluster_id` - (Required, String) Specifies the DWS cluster ID.
33+
34+
* `database_name` - (Required, String) Specifies the database name to which the schema space management belongs
35+
36+
* `schema_name` - (Optional, String) Specifies the name of the schema. Fuzzy search is supported.
37+
38+
## Attribute Reference
39+
40+
In addition to all arguments above, the following attributes are exported:
41+
42+
* `id` - The data source ID.
43+
44+
* `schemas` - All schema space management that match the filter parameters.
45+
46+
The [schemas](#schemas_struct) structure is documented below.
47+
48+
<a name="schemas_struct"></a>
49+
The `schemas` block supports:
50+
51+
* `database_name` - The database name corresponding to the schema.
52+
53+
* `schema_name` - The name of the schema.
54+
55+
* `used` - The number of schema spaces used, in bytes.
56+
57+
* `space_limit` - The number of available spaces, in bytes.
58+
59+
* `skew_percent` - The skew rate of the schema.
60+
61+
* `min_value` - The number of used spaces by the DN with the minimum usage, in bytes.
62+
63+
* `max_value` - The number of used spaces by the DN with the maximum usage, in bytes.
64+
65+
* `dn_num` - The number of DNs.
66+
67+
* `min_dn` - The DN that uses the least space.
68+
69+
* `max_dn` - The DN that uses the most space.

huaweicloud/provider.go

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1024,20 +1024,21 @@ func Provider() *schema.Provider {
10241024
"huaweicloud_waf_rules_web_tamper_protection": waf.DataSourceWafRulesWebTamperProtection(),
10251025
"huaweicloud_waf_source_ips": waf.DataSourceWafSourceIps(),
10261026

1027-
"huaweicloud_dws_alarm_subscriptions": dws.DataSourceAlarmSubscriptions(),
1028-
"huaweicloud_dws_availability_zones": dws.DataSourceDwsAvailabilityZones(),
1029-
"huaweicloud_dws_cluster_logs": dws.DataSourceDwsClusterLogs(),
1030-
"huaweicloud_dws_clusters": dws.DataSourceDwsClusters(),
1031-
"huaweicloud_dws_disaster_recovery_tasks": dws.DataSourceDisasterRecoveryTasks(),
1032-
"huaweicloud_dws_event_subscriptions": dws.DataSourceEventSubscriptions(),
1033-
"huaweicloud_dws_flavors": dws.DataSourceDwsFlavors(),
1034-
"huaweicloud_dws_logical_cluster_rings": dws.DataSourceLogicalClusterRings(),
1035-
"huaweicloud_dws_logical_clusters": dws.DataSourceDwsLogicalClusters(),
1036-
"huaweicloud_dws_quotas": dws.DataSourceDwsQuotas(),
1037-
"huaweicloud_dws_snapshot_policies": dws.DataSourceDwsSnapshotPolicies(),
1038-
"huaweicloud_dws_snapshots": dws.DataSourceDwsSnapshots(),
1039-
"huaweicloud_dws_workload_plans": dws.DataSourceDwsWorkloadPlans(),
1040-
"huaweicloud_dws_workload_queues": dws.DataSourceWorkloadQueues(),
1027+
"huaweicloud_dws_alarm_subscriptions": dws.DataSourceAlarmSubscriptions(),
1028+
"huaweicloud_dws_availability_zones": dws.DataSourceDwsAvailabilityZones(),
1029+
"huaweicloud_dws_cluster_logs": dws.DataSourceDwsClusterLogs(),
1030+
"huaweicloud_dws_clusters": dws.DataSourceDwsClusters(),
1031+
"huaweicloud_dws_disaster_recovery_tasks": dws.DataSourceDisasterRecoveryTasks(),
1032+
"huaweicloud_dws_event_subscriptions": dws.DataSourceEventSubscriptions(),
1033+
"huaweicloud_dws_flavors": dws.DataSourceDwsFlavors(),
1034+
"huaweicloud_dws_logical_cluster_rings": dws.DataSourceLogicalClusterRings(),
1035+
"huaweicloud_dws_logical_clusters": dws.DataSourceDwsLogicalClusters(),
1036+
"huaweicloud_dws_quotas": dws.DataSourceDwsQuotas(),
1037+
"huaweicloud_dws_schema_space_managements": dws.DataSourceDwsSchemaSpaceManagements(),
1038+
"huaweicloud_dws_snapshot_policies": dws.DataSourceDwsSnapshotPolicies(),
1039+
"huaweicloud_dws_snapshots": dws.DataSourceDwsSnapshots(),
1040+
"huaweicloud_dws_workload_plans": dws.DataSourceDwsWorkloadPlans(),
1041+
"huaweicloud_dws_workload_queues": dws.DataSourceWorkloadQueues(),
10411042

10421043
"huaweicloud_workspace_desktops": workspace.DataSourceDesktops(),
10431044
"huaweicloud_workspace_flavors": workspace.DataSourceWorkspaceFlavors(),
Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
package dws
2+
3+
import (
4+
"fmt"
5+
"regexp"
6+
"testing"
7+
8+
"github.com/hashicorp/go-uuid"
9+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
10+
11+
"github.com/huaweicloud/terraform-provider-huaweicloud/huaweicloud/services/acceptance"
12+
)
13+
14+
func TestAccDataSourceSchemaSpaceManagements_basic(t *testing.T) {
15+
var (
16+
notFoundDatabase = "data.huaweicloud_dws_schema_space_managements.test"
17+
dcNotFoundDatabase = acceptance.InitDataSourceCheck(notFoundDatabase)
18+
dataSource = "data.huaweicloud_dws_schema_space_managements.test"
19+
dc = acceptance.InitDataSourceCheck(dataSource)
20+
bySchemaName = "data.huaweicloud_dws_schema_space_managements.filter_by_schema_name"
21+
dcBySchemaName = acceptance.InitDataSourceCheck(bySchemaName)
22+
)
23+
resource.ParallelTest(t, resource.TestCase{
24+
PreCheck: func() {
25+
acceptance.TestAccPreCheck(t)
26+
acceptance.TestAccPreCheckDwsClusterId(t)
27+
},
28+
ProviderFactories: acceptance.TestAccProviderFactories,
29+
Steps: []resource.TestStep{
30+
{
31+
Config: testDataSourceSchemaSpaceManagements_clusterIdNotExist(),
32+
ExpectError: regexp.MustCompile("Cluster does not exist or has been deleted"),
33+
},
34+
{
35+
Config: testDataSourceSchemaSpaceManagements_basic(),
36+
Check: resource.ComposeTestCheckFunc(
37+
dc.CheckResourceExists(),
38+
dcNotFoundDatabase.CheckResourceExists(),
39+
resource.TestCheckOutput("not_found_database", "true"),
40+
resource.TestMatchResourceAttr(dataSource, "schemas.#", regexp.MustCompile(`^[1-9]([0-9]*)?$`)),
41+
resource.TestCheckOutput("assert_space_limit", "true"),
42+
dcBySchemaName.CheckResourceExists(),
43+
resource.TestCheckResourceAttr(bySchemaName, "schemas.0.database_name", "gaussdb"),
44+
resource.TestCheckResourceAttrSet(bySchemaName, "schemas.0.schema_name"),
45+
resource.TestCheckResourceAttrSet(bySchemaName, "schemas.0.used"),
46+
resource.TestCheckResourceAttrSet(bySchemaName, "schemas.0.space_limit"),
47+
resource.TestCheckResourceAttrSet(bySchemaName, "schemas.0.skew_percent"),
48+
resource.TestCheckResourceAttrSet(bySchemaName, "schemas.0.dn_num"),
49+
),
50+
},
51+
},
52+
})
53+
}
54+
55+
func testDataSourceSchemaSpaceManagements_clusterIdNotExist() string {
56+
clusterId, _ := uuid.GenerateUUID()
57+
return fmt.Sprintf(`
58+
data "huaweicloud_dws_schema_space_managements" "test" {
59+
cluster_id = "%s"
60+
database_name = "gaussdb"
61+
}
62+
`, clusterId)
63+
}
64+
65+
func testDataSourceSchemaSpaceManagements_basic() string {
66+
return fmt.Sprintf(`
67+
data "huaweicloud_dws_schema_space_managements" "not_found_database" {
68+
cluster_id = "%[1]s"
69+
database_name = "not_found_database"
70+
}
71+
72+
output "not_found_database" {
73+
value = length(data.huaweicloud_dws_schema_space_managements.not_found_database.schemas) == 0
74+
}
75+
76+
data "huaweicloud_dws_schema_space_managements" "test" {
77+
depends_on = [
78+
huaweicloud_dws_schema_space_management.test
79+
]
80+
81+
cluster_id = "%[1]s"
82+
database_name = huaweicloud_dws_schema_space_management.test.database_name
83+
}
84+
85+
# Modify space quota for scheduler to 2MB (2048 Byte).
86+
resource "huaweicloud_dws_schema_space_management" "test" {
87+
cluster_id = "%[1]s"
88+
database_name = "gaussdb"
89+
schema_name = "scheduler"
90+
space_limit = "2048"
91+
}
92+
93+
# Filter by schema name.
94+
data "huaweicloud_dws_schema_space_managements" "filter_by_schema_name" {
95+
depends_on = [
96+
huaweicloud_dws_schema_space_management.test
97+
]
98+
99+
cluster_id = "%[1]s"
100+
database_name = huaweicloud_dws_schema_space_management.test.database_name
101+
schema_name = local.schema_name
102+
}
103+
104+
locals {
105+
schema_name = huaweicloud_dws_schema_space_management.test.schema_name
106+
107+
# Convert the obtained value from Byte to MB.
108+
space_limit = try([for v in data.huaweicloud_dws_schema_space_managements.filter_by_schema_name.schemas : ceil(v.space_limit / 1024 / 1024)
109+
if v.schema_name == local.schema_name][0], null)
110+
}
111+
112+
output "assert_space_limit" {
113+
value = local.space_limit == 2
114+
}
115+
`, acceptance.HW_DWS_CLUSTER_ID)
116+
}

0 commit comments

Comments
 (0)