Skip to content

Commit b2ba7a1

Browse files
added qos support (#14929) (#24161)
[upstream:214ebd8df12aa3040fac3d200cf2310dfce9252a] Signed-off-by: Modular Magician <[email protected]>
1 parent b7fca48 commit b2ba7a1

File tree

7 files changed

+103
-0
lines changed

7 files changed

+103
-0
lines changed

.changelog/14929.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
```release-note:enhancement
2+
netapp: added `qosType` and `availableThroughputMibps` fields to `netapp_storage_pool` resource
3+
```
4+
5+
```release-note:enhancement
6+
netapp: added `throughputMibps` field to `netapp_volume` resource
7+
```

google/services/netapp/resource_netapp_storage_pool.go

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,13 @@ Please refer to the field 'effective_labels' for all of the labels present on th
135135
ForceNew: true,
136136
Description: `When enabled, the volumes uses Active Directory as LDAP name service for UID/GID lookups. Required to enable extended group support for NFSv3,
137137
using security identifiers for NFSv4.1 or principal names for kerberized NFSv4.1.`,
138+
},
139+
"qos_type": {
140+
Type: schema.TypeString,
141+
Optional: true,
142+
ValidateFunc: verify.ValidateEnum([]string{"QOS_TYPE_UNSPECIFIED", "AUTO", "MANUAL", ""}),
143+
Description: `QoS (Quality of Service) type of the storage pool.
144+
Possible values are: AUTO, MANUAL. Possible values: ["QOS_TYPE_UNSPECIFIED", "AUTO", "MANUAL"]`,
138145
},
139146
"replica_zone": {
140147
Type: schema.TypeString,
@@ -149,6 +156,7 @@ using security identifiers for NFSv4.1 or principal names for kerberized NFSv4.1
149156
},
150157
"total_throughput_mibps": {
151158
Type: schema.TypeString,
159+
Computed: true,
152160
Optional: true,
153161
Description: `Optional. Custom Performance Total Throughput of the pool (in MiB/s).`,
154162
},
@@ -160,6 +168,11 @@ using security identifiers for NFSv4.1 or principal names for kerberized NFSv4.1
160168
[zone switch](https://cloud.google.com/netapp/volumes/docs/configure-and-use/storage-pools/edit-or-delete-storage-pool#switch_active_and_replica_zones).
161169
If you want to create a zonal Flex pool, specify a zone name for 'location' and omit 'zone'.`,
162170
},
171+
"available_throughput_mibps": {
172+
Type: schema.TypeFloat,
173+
Computed: true,
174+
Description: `Available throughput of the storage pool (in MiB/s).`,
175+
},
163176
"effective_labels": {
164177
Type: schema.TypeMap,
165178
Computed: true,
@@ -285,6 +298,12 @@ func resourceNetappStoragePoolCreate(d *schema.ResourceData, meta interface{}) e
285298
} else if v, ok := d.GetOkExists("total_iops"); !tpgresource.IsEmptyValue(reflect.ValueOf(totalIopsProp)) && (ok || !reflect.DeepEqual(v, totalIopsProp)) {
286299
obj["totalIops"] = totalIopsProp
287300
}
301+
qosTypeProp, err := expandNetappStoragePoolQosType(d.Get("qos_type"), d, config)
302+
if err != nil {
303+
return err
304+
} else if v, ok := d.GetOkExists("qos_type"); !tpgresource.IsEmptyValue(reflect.ValueOf(qosTypeProp)) && (ok || !reflect.DeepEqual(v, qosTypeProp)) {
305+
obj["qosType"] = qosTypeProp
306+
}
288307
effectiveLabelsProp, err := expandNetappStoragePoolEffectiveLabels(d.Get("effective_labels"), d, config)
289308
if err != nil {
290309
return err
@@ -441,6 +460,12 @@ func resourceNetappStoragePoolRead(d *schema.ResourceData, meta interface{}) err
441460
if err := d.Set("total_iops", flattenNetappStoragePoolTotalIops(res["totalIops"], d, config)); err != nil {
442461
return fmt.Errorf("Error reading StoragePool: %s", err)
443462
}
463+
if err := d.Set("qos_type", flattenNetappStoragePoolQosType(res["qosType"], d, config)); err != nil {
464+
return fmt.Errorf("Error reading StoragePool: %s", err)
465+
}
466+
if err := d.Set("available_throughput_mibps", flattenNetappStoragePoolAvailableThroughputMibps(res["availableThroughputMibps"], d, config)); err != nil {
467+
return fmt.Errorf("Error reading StoragePool: %s", err)
468+
}
444469
if err := d.Set("terraform_labels", flattenNetappStoragePoolTerraformLabels(res["labels"], d, config)); err != nil {
445470
return fmt.Errorf("Error reading StoragePool: %s", err)
446471
}
@@ -515,6 +540,12 @@ func resourceNetappStoragePoolUpdate(d *schema.ResourceData, meta interface{}) e
515540
} else if v, ok := d.GetOkExists("total_iops"); !tpgresource.IsEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, totalIopsProp)) {
516541
obj["totalIops"] = totalIopsProp
517542
}
543+
qosTypeProp, err := expandNetappStoragePoolQosType(d.Get("qos_type"), d, config)
544+
if err != nil {
545+
return err
546+
} else if v, ok := d.GetOkExists("qos_type"); !tpgresource.IsEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, qosTypeProp)) {
547+
obj["qosType"] = qosTypeProp
548+
}
518549
effectiveLabelsProp, err := expandNetappStoragePoolEffectiveLabels(d.Get("effective_labels"), d, config)
519550
if err != nil {
520551
return err
@@ -563,6 +594,10 @@ func resourceNetappStoragePoolUpdate(d *schema.ResourceData, meta interface{}) e
563594
updateMask = append(updateMask, "totalIops")
564595
}
565596

597+
if d.HasChange("qos_type") {
598+
updateMask = append(updateMask, "qosType")
599+
}
600+
566601
if d.HasChange("effective_labels") {
567602
updateMask = append(updateMask, "labels")
568603
}
@@ -842,6 +877,14 @@ func flattenNetappStoragePoolTotalIops(v interface{}, d *schema.ResourceData, co
842877
return v
843878
}
844879

880+
func flattenNetappStoragePoolQosType(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
881+
return v
882+
}
883+
884+
func flattenNetappStoragePoolAvailableThroughputMibps(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
885+
return v
886+
}
887+
845888
func flattenNetappStoragePoolTerraformLabels(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
846889
if v == nil {
847890
return v
@@ -913,6 +956,10 @@ func expandNetappStoragePoolTotalIops(v interface{}, d tpgresource.TerraformReso
913956
return v, nil
914957
}
915958

959+
func expandNetappStoragePoolQosType(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
960+
return v, nil
961+
}
962+
916963
func expandNetappStoragePoolEffectiveLabels(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (map[string]string, error) {
917964
if v == nil {
918965
return map[string]string{}, nil

google/services/netapp/resource_netapp_storage_pool_generated_meta.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ api_resource_type_kind: 'StoragePool'
77
fields:
88
- field: 'active_directory'
99
- field: 'allow_auto_tiering'
10+
- field: 'available_throughput_mibps'
1011
- field: 'capacity_gib'
1112
- field: 'custom_performance_enabled'
1213
- field: 'description'
@@ -21,6 +22,7 @@ fields:
2122
- field: 'name'
2223
provider_only: true
2324
- field: 'network'
25+
- field: 'qos_type'
2426
- field: 'replica_zone'
2527
- field: 'service_level'
2628
- field: 'terraform_labels'

google/services/netapp/resource_netapp_volume.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -480,6 +480,12 @@ To disable automatic snapshot creation you have to remove the whole snapshot_pol
480480
},
481481
},
482482
},
483+
"throughput_mibps": {
484+
Type: schema.TypeFloat,
485+
Computed: true,
486+
Optional: true,
487+
Description: `Optional. Custom Performance Total Throughput of the pool (in MiB/s).`,
488+
},
483489
"tiering_policy": {
484490
Type: schema.TypeList,
485491
Optional: true,
@@ -772,6 +778,12 @@ func resourceNetappVolumeCreate(d *schema.ResourceData, meta interface{}) error
772778
} else if v, ok := d.GetOkExists("hybrid_replication_parameters"); !tpgresource.IsEmptyValue(reflect.ValueOf(hybridReplicationParametersProp)) && (ok || !reflect.DeepEqual(v, hybridReplicationParametersProp)) {
773779
obj["hybridReplicationParameters"] = hybridReplicationParametersProp
774780
}
781+
throughputMibpsProp, err := expandNetappVolumeThroughputMibps(d.Get("throughput_mibps"), d, config)
782+
if err != nil {
783+
return err
784+
} else if v, ok := d.GetOkExists("throughput_mibps"); !tpgresource.IsEmptyValue(reflect.ValueOf(throughputMibpsProp)) && (ok || !reflect.DeepEqual(v, throughputMibpsProp)) {
785+
obj["throughputMibps"] = throughputMibpsProp
786+
}
775787
effectiveLabelsProp, err := expandNetappVolumeEffectiveLabels(d.Get("effective_labels"), d, config)
776788
if err != nil {
777789
return err
@@ -988,6 +1000,9 @@ func resourceNetappVolumeRead(d *schema.ResourceData, meta interface{}) error {
9881000
if err := d.Set("hybrid_replication_parameters", flattenNetappVolumeHybridReplicationParameters(res["hybridReplicationParameters"], d, config)); err != nil {
9891001
return fmt.Errorf("Error reading Volume: %s", err)
9901002
}
1003+
if err := d.Set("throughput_mibps", flattenNetappVolumeThroughputMibps(res["throughputMibps"], d, config)); err != nil {
1004+
return fmt.Errorf("Error reading Volume: %s", err)
1005+
}
9911006
if err := d.Set("terraform_labels", flattenNetappVolumeTerraformLabels(res["labels"], d, config)); err != nil {
9921007
return fmt.Errorf("Error reading Volume: %s", err)
9931008
}
@@ -1092,6 +1107,12 @@ func resourceNetappVolumeUpdate(d *schema.ResourceData, meta interface{}) error
10921107
} else if v, ok := d.GetOkExists("hybrid_replication_parameters"); !tpgresource.IsEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, hybridReplicationParametersProp)) {
10931108
obj["hybridReplicationParameters"] = hybridReplicationParametersProp
10941109
}
1110+
throughputMibpsProp, err := expandNetappVolumeThroughputMibps(d.Get("throughput_mibps"), d, config)
1111+
if err != nil {
1112+
return err
1113+
} else if v, ok := d.GetOkExists("throughput_mibps"); !tpgresource.IsEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, throughputMibpsProp)) {
1114+
obj["throughputMibps"] = throughputMibpsProp
1115+
}
10951116
effectiveLabelsProp, err := expandNetappVolumeEffectiveLabels(d.Get("effective_labels"), d, config)
10961117
if err != nil {
10971118
return err
@@ -1164,6 +1185,10 @@ func resourceNetappVolumeUpdate(d *schema.ResourceData, meta interface{}) error
11641185
updateMask = append(updateMask, "hybridReplicationParameters")
11651186
}
11661187

1188+
if d.HasChange("throughput_mibps") {
1189+
updateMask = append(updateMask, "throughputMibps")
1190+
}
1191+
11671192
if d.HasChange("effective_labels") {
11681193
updateMask = append(updateMask, "labels")
11691194
}
@@ -1958,6 +1983,10 @@ func flattenNetappVolumeHybridReplicationParametersLabels(v interface{}, d *sche
19581983
return v
19591984
}
19601985

1986+
func flattenNetappVolumeThroughputMibps(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
1987+
return v
1988+
}
1989+
19611990
func flattenNetappVolumeTerraformLabels(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
19621991
if v == nil {
19631992
return v
@@ -2646,6 +2675,10 @@ func expandNetappVolumeHybridReplicationParametersLabels(v interface{}, d tpgres
26462675
return m, nil
26472676
}
26482677

2678+
func expandNetappVolumeThroughputMibps(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
2679+
return v, nil
2680+
}
2681+
26492682
func expandNetappVolumeEffectiveLabels(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (map[string]string, error) {
26502683
if v == nil {
26512684
return map[string]string{}, nil

google/services/netapp/resource_netapp_volume_generated_meta.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ fields:
8383
- field: 'storage_pool'
8484
- field: 'terraform_labels'
8585
provider_only: true
86+
- field: 'throughput_mibps'
8687
- field: 'tiering_policy.cooling_threshold_days'
8788
- field: 'tiering_policy.tier_action'
8889
- field: 'unix_permissions'

website/docs/r/netapp_storage_pool.html.markdown

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,12 @@ The following arguments are supported:
191191
Flag indicating that the hot-tier threshold will be auto-increased by 10% of the hot-tier when it hits 100%. Default is true.
192192
The increment will kick in only if the new size after increment is still less than or equal to storage pool size.
193193

194+
* `qos_type` -
195+
(Optional)
196+
QoS (Quality of Service) type of the storage pool.
197+
Possible values are: AUTO, MANUAL.
198+
Possible values are: `QOS_TYPE_UNSPECIFIED`, `AUTO`, `MANUAL`.
199+
194200
* `project` - (Optional) The ID of the project in which the resource belongs.
195201
If it is not provided, the provider project is used.
196202

@@ -211,6 +217,9 @@ In addition to the arguments listed above, the following computed attributes are
211217
* `encryption_type` -
212218
Reports if volumes in the pool are encrypted using a Google-managed encryption key or CMEK.
213219

220+
* `available_throughput_mibps` -
221+
Available throughput of the storage pool (in MiB/s).
222+
214223
* `terraform_labels` -
215224
The combination of labels configured directly on the resource
216225
and default labels configured on the provider.

website/docs/r/netapp_volume.html.markdown

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,10 @@ The following arguments are supported:
177177
The Hybrid Replication parameters for the volume.
178178
Structure is [documented below](#nested_hybrid_replication_parameters).
179179

180+
* `throughput_mibps` -
181+
(Optional)
182+
Optional. Custom Performance Total Throughput of the pool (in MiB/s).
183+
180184
* `project` - (Optional) The ID of the project in which the resource belongs.
181185
If it is not provided, the provider project is used.
182186

0 commit comments

Comments
 (0)