README.md
August 19, 2026 · View on GitHub
Description
This module creates a Google Cloud NetApp Volumes storage pool.
NetApp Volumes is a first-party Google service that provides NFS shared file systems to VMs. It offers advanced data management capabilities and highly scalable capacity and performance.
NetApp Volume provides:
- support for NFSv3 and NFSv4.1
- a rich feature set
- scalable performance
- FlexCache: Caching of ONTAP-based volumes to provide high-throughput and low latency read access to compute clusters of on-premises data
- Auto-tiering of unused data to optimize cost
Support for NetApp Volumes is split into two modules.
- netapp-storage-pool provisions a storage pool. Storage pools are pre-provisioned storage capacity containers which host volumes. A pool also defines fundamental properties of all the volumes within, like the region, the attached network, the service level, CMEK encryption, Active Directory and LDAP settings.
- netapp-volume provisions a volume inside an existing storage pool. A volume is a file system container shared using NFSv3 or NFSv4.1.
For more information on this and other network storage options in the Cluster Toolkit, see the extended Network Storage documentation.
NetApp storage pool service levels
The netapp-storage-pool module supports the following NetApp Volumes service levels:
- Standard: 16 KiBps throughput per provisioned KiB of volume capacity.
- Premium: 64 KiBps throughput per provisioned KiB of volume capacity. Optional auto-tiering.
- Extreme: 128 KiBps throughput per provisioned KiB of volume capacity. Optional auto-tiering.
- Flex Unified: Next-generation Flex service level. Supports zonal and regional pools, auto-tiering, and large capacity pools. Flex File and ONTAP mode are not supported by this module.
Check the service level matrix for additional information on capability differences between service levels.
Flex Unified defaults
When service_level is FLEX, the module sets these values automatically:
mode=DEFAULTtype=UNIFIED
You do not set mode or type in your blueprint. Flex File (type: FILE) and ONTAP mode are not supported. Use pre-existing-network-storage for ONTAP-mode pools.
Region and zone settings
Always set region in your blueprint. Zone settings apply only to Flex Unified pools.
- Standard, Premium, and Extreme — Set
regiononly. Blueprint-levelzonevariables used for VMs are ignored. - Zonal Flex Unified — Set
regionandzone. The module verifies thatzoneis inregion. - Regional Flex Unified — Set
region,zone(active zone), andreplica_zone. The module verifies that both zones are inregion. - Large capacity (SCALE_TYPE_SCALEOUT) — Zonal Flex Unified only. Set
regionandzone. Do not setreplica_zone.
Minimum pool capacity
The module enforces these minimum capacity_gib values at plan time:
- STANDARD, PREMIUM, and EXTREME — 2048 GiB
- Flex Unified — 1024 GiB
- Flex Unified large capacity (
scale_type: SCALE_TYPE_SCALEOUT) — 6144 GiB
Flex Unified auto-tiering
When allow_auto_tiering is true on a Flex Unified pool:
- Set
hot_tier_size_gibto the hot-tier capacity in GiB. - Optionally set
enable_hot_tier_auto_resizeto allow the hot tier to grow when it reaches 100%.
When allow_auto_tiering is false (the default), omit hot_tier_size_gib and
enable_hot_tier_auto_resize. The module fails at plan time if either is set.
Volumes in the pool can then enable auto-tiering with tiering_policy in the netapp-volume module.
Flex Unified large capacity pools
To host Flex Unified large capacity volumes, create a zonal pool with:
service_level: FLEXregionandzone(omitreplica_zone)scale_type: SCALE_TYPE_SCALEOUTcapacity_gibof at least 6144
Pair this pool with volumes that set large_capacity_config in the netapp-volume module.
Flex Unified custom performance
Flex Unified pools use custom performance implicitly. You can scale capacity, throughput, and IOPS independently.
- Each pool includes 64 MiB/s throughput and 1,024 IOPS by default.
- Set
total_throughput_mibpsto provision additional throughput in 1 MiB/s increments, up to 5 GiB/s for standard Flex pools. - Set
total_iopsto provision additional IOPS, up to 160,000 per pool. Omittotal_iopsto let Google Cloud calculate IOPS fromtotal_throughput_mibps(16 IOPS per additional MiB/s). - All volumes in the pool share the pool throughput and IOPS.
- Large capacity pools (
scale_type: SCALE_TYPE_SCALEOUT) can reach higher throughput limits. See Volume performance sizing.
- id: flex_pool_custom_perf
source: modules/file-system/netapp-storage-pool
use: [network, private_service_access]
settings:
pool_name: "flex-pool-perf"
service_level: FLEX
region: us-east1
zone: us-east1-b
capacity_gib: 5120
total_throughput_mibps: 256
total_iops: 4096
Flex Unified zonal and regional pools
Flex Unified pools can be zonal or regional. The module selects the pool type from your zone settings.
Zonal vs regional rules
- Zonal pool — Set
regionandzone. Omitreplica_zone. Poollocationis the zone name. - Regional pool — Set
region,zone(active zone), andreplica_zone(standby zone). Poollocationis the region name. Volume access is served from the active zone. If the active zone fails,replica_zonebecomes active. zoneandreplica_zonemust be different for regional pools.zoneandreplica_zonemust be withinregion.- Large capacity pools (
scale_type: SCALE_TYPE_SCALEOUT) must be zonal. Setzoneand omitreplica_zone. - Standard, Premium, and Extreme pools use
regiononly. Blueprint-levelzonevalues (for example, for VM placement) are ignored and do not block pool creation.
Multiple pools in one blueprint
To provision both a zonal and a regional Flex pool, add one netapp-storage-pool module per pool. Use a unique module id and pool_name for each pool. Configure zone settings per module. Attach volumes with use: [<pool_module_id>].
Example:
vars:
region: us-east1
zone_a: us-east1-b
zone_b: us-east1-c
deployment_groups:
- group: netapp-pools
modules:
- id: network
source: modules/network/pre-existing-vpc
settings:
region: $(vars.region)
network_name: $(vars.network)
- id: flex_pool_zonal
source: modules/file-system/netapp-storage-pool
use: [network]
settings:
pool_name: $(vars.deployment_name)-flex-zonal
service_level: FLEX
region: $(vars.region)
zone: $(vars.zone_a)
capacity_gib: 4096
total_throughput_mibps: 128
total_iops: 2048
- id: flex_pool_regional
source: modules/file-system/netapp-storage-pool
use: [network]
settings:
pool_name: $(vars.deployment_name)-flex-regional
service_level: FLEX
region: $(vars.region)
zone: $(vars.zone_a)
replica_zone: $(vars.zone_b)
capacity_gib: 4096
total_throughput_mibps: 128
total_iops: 2048
- group: netapp-volumes
modules:
- id: zonal_homefs
source: modules/file-system/netapp-volume
use: [flex_pool_zonal]
settings:
volume_name: zonal_homefs
capacity_gib: 1024
local_mount: /zonal-home
protocols: ["NFSV3"]
- id: regional_homefs
source: modules/file-system/netapp-volume
use: [flex_pool_regional]
settings:
volume_name: regional_homefs
capacity_gib: 1024
local_mount: /regional-home
protocols: ["NFSV3"]
Zone switch and Terraform state
If a regional pool fails over outside Terraform, update zone and replica_zone in your blueprint to match the current active and replica zones before the next apply. Otherwise Terraform can initiate an unwanted zone switch.
ONTAP mode
These modules provision and manage NetApp Volumes through Google Cloud APIs in Default mode only. They do not support Flex Unified pools in ONTAP mode.
If you need ONTAP-mode pools or volumes, provision them outside Cluster Toolkit and integrate them with the pre-existing-network-storage module. In ONTAP mode, the pool is created through Google Cloud APIs, but volumes, snapshots, and policies inside the pool are managed with ONTAP tools. See Manage ONTAP mode.
Outputs for netapp-volume
When a volume module uses use: [netapp_pool], Cluster Toolkit wires these pool outputs automatically:
netapp_storage_pool_idservice_leveltypeallow_auto_tieringscale_type
The volume module parses volume location from netapp_storage_pool_id. It does not inherit region or zone.
On-boarding NetApp Volumes
NetApp Volumes uses Private Service Access (PSA) to connect volumes to your network. Before you create a storage pool, make sure to connect NetApp Volumes to your network.
Example of creating a storage pool using a new network:
deployment_groups:
- group: primary
modules:
- id: network
source: modules/network/vpc
settings:
region: $(vars.region)
- id: private_service_access
source: modules/network/private-service-access
use: [network]
settings:
prefix_length: 24
service_name: "netapp.servicenetworking.goog"
deletion_policy: "ABANDON"
- id: netapp_pool
source: modules/file-system/netapp-storage-pool
use: [network, private_service_access]
settings:
pool_name: $(vars.deployment_name)-eda-pool
capacity_gib: 20000
service_level: "EXTREME"
region: $(vars.region)
Example of creating a storage pool using an existing network which was already PSA-peered with NetApp Volume:
deployment_groups:
- group: primary
modules:
- id: network
source: modules/network/pre-existing-vpc
settings:
project_id: $(vars.project_id)
region: $(vars.region)
network_name: $(vars.network)
- id: netapp_pool
source: modules/file-system/netapp-storage-pool
use: [network]
settings:
pool_name: "eda-pool"
capacity_gib: 20000
service_level: "EXTREME"
region: $(vars.region)
Storage pool examples
Standard, Premium, or Extreme
- id: netapp_pool
source: modules/file-system/netapp-storage-pool
use: [network, private_service_access]
settings:
pool_name: "mypool"
region: "us-west4"
capacity_gib: 2048
service_level: "EXTREME"
allow_auto_tiering: true
active_directory_policy: "projects/myproject/locations/us-west4/activeDirectories/my-ad"
cmek_policy: "projects/myproject/locations/us-west4/kmsConfigs/my-cmek-policy"
ldap_enabled: false
description: "Demo storage pool"
labels:
owner: bob
Flex Unified zonal with auto-tiering
- id: flex_pool
source: modules/file-system/netapp-storage-pool
use: [network, private_service_access]
settings:
pool_name: "flex-pool"
service_level: FLEX
region: us-east1
zone: us-east1-b
capacity_gib: 4096
total_throughput_mibps: 256
total_iops: 4096
allow_auto_tiering: true
hot_tier_size_gib: 1024
enable_hot_tier_auto_resize: true
labels:
owner: bob
Flex Unified large capacity (SCALEOUT)
- id: flex_pool_large
source: modules/file-system/netapp-storage-pool
use: [network, private_service_access]
settings:
pool_name: "flex-pool-large"
service_level: FLEX
region: us-east1
zone: us-east1-b
scale_type: SCALE_TYPE_SCALEOUT
capacity_gib: 12288
total_throughput_mibps: 1024
total_iops: 16384
allow_auto_tiering: true
hot_tier_size_gib: 2048
labels:
owner: bob
NetApp Volumes quota
Your project must have unused quota for NetApp Volumes in the region you will provision the storage pool. This can be found by browsing to the Quota tab within IAM & Admin in the Cloud Console. Please note that there are separate quota limits for Standard, Premium/Extreme, and Flex Unified service levels.
See also NetApp Volumes default quotas.
License
Copyright 2026 Google LLC
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
Requirements
| Name | Version |
|---|---|
| terraform | >= 1.12.2 |
| >= 6.45.0 | |
| random | ~> 3.0 |
Providers
| Name | Version |
|---|---|
| >= 6.45.0 | |
| random | ~> 3.0 |
Modules
No modules.
Resources
| Name | Type |
|---|---|
| google_netapp_storage_pool.netapp_storage_pool | resource |
| random_id.resource_name_suffix | resource |
| google_compute_network_peering.private_peering | data source |
Inputs
| Name | Description | Type | Default | Required |
|---|---|---|---|---|
| active_directory_policy | The ID of the Active Directory policy to apply to the storage pool in the format:projects/<project_id>/locations/<location>/activeDirectories/<name> | string | null | no |
| allow_auto_tiering | Whether to allow automatic tiering for the storage pool. | bool | false | no |
| capacity_gib | The capacity of the storage pool in GiB. Minimum is 2048 GiB for STANDARD, PREMIUM, and EXTREME; 1024 GiB for Flex Unified; 6144 GiB for large capacity (SCALE_TYPE_SCALEOUT) pools. | number | 2048 | no |
| cmek_policy | The ID of the Customer Managed Encryption Key (CMEK) policy to apply to the storage pool in the format:projects/<project>/locations/<location>/kmsConfigs/<name> | string | null | no |
| deployment_name | Name of the deployment, used as name of the NetApp storage pool if no name is specified. | string | n/a | yes |
| description | A description of the NetApp storage pool. | string | "" | no |
| enable_hot_tier_auto_resize | Whether hot-tier threshold will auto-increase when it reaches 100%. Flex-only. Requires allow_auto_tiering to be true. | bool | null | no |
| hot_tier_size_gib | Total hot tier capacity for the storage pool in GiB. Flex-only. Requires allow_auto_tiering to be true. | number | null | no |
| labels | Labels to add to the NetApp storage pool. Key-value pairs. | map(string) | n/a | yes |
| ldap_enabled | Whether to enable LDAP for the storage pool. | bool | false | no |
| network_id | The ID of the GCE VPC network to which the NetApp storage pool is connected given in the format:projects/<project_id>/global/networks/<network_name>" | string | n/a | yes |
| network_self_link | Network self-link the pool will be on, required for checking private service access | string | n/a | yes |
| pool_name | The name of the storage pool. Leave empty to generate name based on deployment name. | string | null | no |
| private_vpc_connection_peering | The name of the private VPC connection peering. | string | "sn-netapp-prod" | no |
| project_id | ID of project in which the NetApp storage pool will be created. | string | n/a | yes |
| region | Region for the storage pool. Required for all service levels. | string | n/a | yes |
| replica_zone | Replica zone for regional Flex Unified pools. Must be within region when service_level is FLEX. Omit for zonal Flex Unified pools. Ignored for STANDARD, PREMIUM, and EXTREME pools. | string | null | no |
| scale_type | Scale type of the storage pool. Flex-only. Use SCALE_TYPE_SCALEOUT for large capacity pools. | string | null | no |
| service_level | The service level of the storage pool. | string | "PREMIUM" | no |
| total_iops | Total pool IOPS for Flex Unified custom performance. Omit to let Google Cloud calculate IOPS from total_throughput_mibps. | number | null | no |
| total_throughput_mibps | Total pool throughput in MiB/s for Flex Unified custom performance. Omit to use the default 64 MiB/s. | number | null | no |
| zone | Zone for zonal Flex Unified pools, or active zone for regional Flex Unified pools. Must be within region when service_level is FLEX. Ignored for STANDARD, PREMIUM, and EXTREME pools. | string | null | no |
Outputs
| Name | Description |
|---|---|
| allow_auto_tiering | Whether the storage pool supports auto-tiering enabled volumes. |
| capacity_gb | Storage pool capacity in GiB. |
| mode | Storage pool mode. Flex-only. |
| netapp_storage_pool_id | An identifier for the resource with format projects/{{project}}/locations/{{location}}/storagePools/{{name}} |
| scale_type | Scale type of the storage pool. Flex-only. |
| service_level | Storage pool service level. |
| type | Storage pool type. Flex Unified pools use UNIFIED. Omitted for STANDARD, PREMIUM, and EXTREME pools. |