Skip to content

Commit dcaf846

Browse files
Mehul3217rileykarson
authored andcommitted
add AutoTier support for netapp storagePools and Volumes (GoogleCloudPlatform#11645)
Co-authored-by: Riley Karson <[email protected]>
1 parent 420b26d commit dcaf846

File tree

4 files changed

+195
-1
lines changed

4 files changed

+195
-1
lines changed

mmv1/products/netapp/StoragePool.yaml

+6
Original file line numberDiff line numberDiff line change
@@ -161,5 +161,11 @@ properties:
161161
Specifies the replica zone for regional Flex pools. `zone` and `replica_zone` values can be swapped to initiate a
162162
[zone switch](https://cloud.google.com/netapp/volumes/docs/configure-and-use/storage-pools/edit-or-delete-storage-pool#switch_active_and_replica_zones).
163163
min_version: beta
164+
- !ruby/object:Api::Type::Boolean
165+
name: 'allowAutoTiering'
166+
description: |
167+
Optional. True if the storage pool supports Auto Tiering enabled volumes. Default is false.
168+
Auto-tiering can be enabled after storage pool creation but it can't be disabled once enabled.
169+
immutable: true
164170
custom_code: !ruby/object:Provider::Terraform::CustomCode
165171
pre_update: templates/terraform/pre_update/netapp_storagepool.go.erb

mmv1/products/netapp/Volume.yaml

+26
Original file line numberDiff line numberDiff line change
@@ -503,3 +503,29 @@ properties:
503503
description: |
504504
Optional. Flag indicating if the volume will have an IP address per node for volumes supporting multiple IP endpoints.
505505
Only the volume with largeCapacity will be allowed to have multiple endpoints.
506+
- !ruby/object:Api::Type::String
507+
name: 'coldTierSizeGib'
508+
description: |
509+
Output only. Size of the volume cold tier data in GiB.
510+
output: true
511+
- !ruby/object:Api::Type::NestedObject
512+
name: tieringPolicy
513+
description: |-
514+
Tiering policy for the volume.
515+
update_mask_fields:
516+
- 'tiering_policy.cooling_threshold_days'
517+
- 'tiering_policy.tier_action'
518+
properties:
519+
- !ruby/object:Api::Type::Integer
520+
name: 'coolingThresholdDays'
521+
description: |
522+
Optional. Time in days to mark the volume's data block as cold and make it eligible for tiering, can be range from 7-183.
523+
Default is 31.
524+
- !ruby/object:Api::Type::Enum
525+
name: 'tierAction'
526+
description: |
527+
Optional. Flag indicating if the volume has tiering policy enable/pause. Default is PAUSED.
528+
values:
529+
- :ENABLED
530+
- :PAUSED
531+
default_value: :PAUSED

mmv1/third_party/terraform/services/netapp/resource_netapp_storage_pool_test.go.erb

+69
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,75 @@ resource "google_netapp_storage_pool" "test_pool" {
129129
`, context)
130130
}
131131

132+
133+
func TestAccNetappStoragePool_autoTieredStoragePoolCreateExample_update(t *testing.T) {
134+
context := map[string]interface{}{
135+
"network_name": acctest.BootstrapSharedServiceNetworkingConnection(t, "gcnv-network-config-1", acctest.ServiceNetworkWithParentService("netapp.servicenetworking.goog")),
136+
"random_suffix": acctest.RandString(t, 10),
137+
}
138+
139+
acctest.VcrTest(t, resource.TestCase{
140+
PreCheck: func() { acctest.AccTestPreCheck(t) },
141+
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
142+
CheckDestroy: testAccCheckNetappStoragePoolDestroyProducer(t),
143+
ExternalProviders: map[string]resource.ExternalProvider{
144+
"time": {},
145+
},
146+
Steps: []resource.TestStep{
147+
{
148+
Config: testAccNetappStoragePool_autoTieredStoragePoolCreateExample_full(context),
149+
},
150+
{
151+
ResourceName: "google_netapp_storage_pool.test_pool",
152+
ImportState: true,
153+
ImportStateVerify: true,
154+
ImportStateVerifyIgnore: []string{"location", "name", "labels", "terraform_labels"},
155+
},
156+
},
157+
})
158+
}
159+
160+
func testAccNetappStoragePool_autoTieredStoragePoolCreateExample_full(context map[string]interface{}) string {
161+
return acctest.Nprintf(`
162+
resource "google_compute_network" "peering_network" {
163+
name = "tf-test-network%{random_suffix}"
164+
}
165+
166+
# Create an IP address
167+
resource "google_compute_global_address" "private_ip_alloc" {
168+
name = "tf-test-address%{random_suffix}"
169+
purpose = "VPC_PEERING"
170+
address_type = "INTERNAL"
171+
prefix_length = 16
172+
network = google_compute_network.peering_network.id
173+
}
174+
175+
# Create a private connection
176+
resource "google_service_networking_connection" "default" {
177+
network = google_compute_network.peering_network.id
178+
service = "netapp.servicenetworking.goog"
179+
reserved_peering_ranges = [google_compute_global_address.private_ip_alloc.name]
180+
}
181+
182+
resource "google_netapp_storage_pool" "test_pool" {
183+
name = "tf-test-pool%{random_suffix}"
184+
location = "us-east4"
185+
service_level = "PREMIUM"
186+
capacity_gib = "2048"
187+
network = google_compute_network.peering_network.id
188+
active_directory = ""
189+
description = "this is a test description"
190+
kms_config = ""
191+
labels = {
192+
key= "test"
193+
value= "pool"
194+
}
195+
ldap_enabled = false
196+
allow_auto_tiering = true
197+
}
198+
`, context)
199+
}
200+
132201
<% unless version == 'ga' -%>
133202
func TestAccNetappStoragePool_FlexRegionalStoragePoolCreateExample_update(t *testing.T) {
134203
context := map[string]interface{}{

mmv1/third_party/terraform/services/netapp/resource_netapp_volume_test.go

+94-1
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,6 @@ resource "google_netapp_storage_pool" "default" {
229229
capacity_gib = "2048"
230230
network = data.google_compute_network.default.id
231231
}
232-
233232
resource "google_netapp_storage_pool" "default2" {
234233
name = "tf-test-pool%{random_suffix}"
235234
location = "us-west2"
@@ -659,3 +658,97 @@ func testAccNetappVolume_volumeBasicExample_cleanupScheduledBackup(t *testing.T,
659658
return nil
660659
}
661660
}
661+
662+
func TestAccNetappVolume_autoTieredNetappVolume_update(t *testing.T) {
663+
context := map[string]interface{}{
664+
"network_name": acctest.BootstrapSharedServiceNetworkingConnection(t, "gcnv-network-config-1", acctest.ServiceNetworkWithParentService("netapp.servicenetworking.goog")),
665+
"random_suffix": acctest.RandString(t, 10),
666+
}
667+
668+
acctest.VcrTest(t, resource.TestCase{
669+
PreCheck: func() { acctest.AccTestPreCheck(t) },
670+
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
671+
CheckDestroy: testAccCheckNetappVolumeDestroyProducer(t),
672+
ExternalProviders: map[string]resource.ExternalProvider{
673+
"time": {},
674+
},
675+
Steps: []resource.TestStep{
676+
{
677+
Config: testAccNetappVolume_autoTieredVolume_default(context),
678+
},
679+
{
680+
ResourceName: "google_netapp_volume.test_volume",
681+
ImportState: true,
682+
ImportStateVerify: true,
683+
ImportStateVerifyIgnore: []string{"restore_parameters", "location", "name", "deletion_policy", "labels", "terraform_labels"},
684+
},
685+
{
686+
Config: testAccNetappVolume_autoTieredVolume_custom(context),
687+
},
688+
{
689+
ResourceName: "google_netapp_volume.test_volume",
690+
ImportState: true,
691+
ImportStateVerify: true,
692+
ImportStateVerifyIgnore: []string{"restore_parameters", "location", "name", "deletion_policy", "labels", "terraform_labels"},
693+
},
694+
},
695+
})
696+
}
697+
698+
func testAccNetappVolume_autoTieredVolume_default(context map[string]interface{}) string {
699+
return acctest.Nprintf(`
700+
resource "google_netapp_storage_pool" "default" {
701+
name = "tf-test-pool%{random_suffix}"
702+
location = "us-west2"
703+
service_level = "PREMIUM"
704+
capacity_gib = "2048"
705+
network = data.google_compute_network.default.id
706+
allow_auto_tiering = true
707+
}
708+
resource "google_netapp_volume" "test_volume" {
709+
location = "us-west2"
710+
name = "tf-test-volume%{random_suffix}"
711+
capacity_gib = "100"
712+
share_name = "tf-test-volume%{random_suffix}"
713+
storage_pool = google_netapp_storage_pool.default.name
714+
protocols = ["NFSV3"]
715+
tiering_policy {
716+
cooling_threshold_days = 31
717+
tier_action = "ENABLED"
718+
}
719+
}
720+
data "google_compute_network" "default" {
721+
name = "%{network_name}"
722+
}
723+
`, context)
724+
}
725+
726+
func testAccNetappVolume_autoTieredVolume_custom(context map[string]interface{}) string {
727+
return acctest.Nprintf(`
728+
resource "google_netapp_storage_pool" "default" {
729+
name = "tf-test-pool%{random_suffix}"
730+
location = "us-west2"
731+
service_level = "PREMIUM"
732+
capacity_gib = "2048"
733+
network = data.google_compute_network.default.id
734+
allow_auto_tiering = true
735+
}
736+
737+
resource "google_netapp_volume" "test_volume" {
738+
location = "us-west2"
739+
name = "tf-test-volume%{random_suffix}"
740+
capacity_gib = "100"
741+
share_name = "tf-test-volume%{random_suffix}"
742+
storage_pool = google_netapp_storage_pool.default.name
743+
protocols = ["NFSV3"]
744+
tiering_policy {
745+
cooling_threshold_days = 20
746+
tier_action = "ENABLED"
747+
}
748+
}
749+
750+
data "google_compute_network" "default" {
751+
name = "%{network_name}"
752+
}
753+
`, context)
754+
}

0 commit comments

Comments
 (0)