diff --git a/avm/res/net-app/net-app-account/README.md b/avm/res/net-app/net-app-account/README.md index 19f4655249..b2292b18e4 100644 --- a/avm/res/net-app/net-app-account/README.md +++ b/avm/res/net-app/net-app-account/README.md @@ -145,7 +145,7 @@ module netAppAccount 'br/public:avm/res/net-app/net-app-account:' = { } ] serviceLevel: 'Premium' - size: 4398046511104 + size: 1 volumes: [ { dataProtection: { @@ -191,9 +191,7 @@ module netAppAccount 'br/public:avm/res/net-app/net-app-account:' = { ] subnetResourceId: '' usageThreshold: 107374182400 - zones: [ - 1 - ] + zone: 1 } { encryptionKeySource: '' @@ -226,9 +224,7 @@ module netAppAccount 'br/public:avm/res/net-app/net-app-account:' = { smbNonBrowsable: 'Disabled' subnetResourceId: '' usageThreshold: 107374182400 - zones: [ - 1 - ] + zone: 1 } ] } @@ -242,7 +238,7 @@ module netAppAccount 'br/public:avm/res/net-app/net-app-account:' = { } ] serviceLevel: 'Premium' - size: 4398046511104 + size: 1 volumes: [] } ] @@ -343,7 +339,7 @@ module netAppAccount 'br/public:avm/res/net-app/net-app-account:' = { } ], "serviceLevel": "Premium", - "size": 4398046511104, + "size": 1, "volumes": [ { "dataProtection": { @@ -389,9 +385,7 @@ module netAppAccount 'br/public:avm/res/net-app/net-app-account:' = { ], "subnetResourceId": "", "usageThreshold": 107374182400, - "zones": [ - 1 - ] + "zone": 1 }, { "encryptionKeySource": "", @@ -424,9 +418,7 @@ module netAppAccount 'br/public:avm/res/net-app/net-app-account:' = { "smbNonBrowsable": "Disabled", "subnetResourceId": "", "usageThreshold": 107374182400, - "zones": [ - 1 - ] + "zone": 1 } ] }, @@ -440,7 +432,7 @@ module netAppAccount 'br/public:avm/res/net-app/net-app-account:' = { } ], "serviceLevel": "Premium", - "size": 4398046511104, + "size": 1, "volumes": [] } ] @@ -543,7 +535,7 @@ param capacityPools = [ } ] serviceLevel: 'Premium' - size: 4398046511104 + size: 1 volumes: [ { dataProtection: { @@ -589,9 +581,7 @@ param capacityPools = [ ] subnetResourceId: '' usageThreshold: 107374182400 - zones: [ - 1 - ] + zone: 1 } { encryptionKeySource: '' @@ -624,9 +614,7 @@ param capacityPools = [ smbNonBrowsable: 'Disabled' subnetResourceId: '' usageThreshold: 107374182400 - zones: [ - 1 - ] + zone: 1 } ] } @@ -640,7 +628,7 @@ param capacityPools = [ } ] serviceLevel: 'Premium' - size: 4398046511104 + size: 1 volumes: [] } ] @@ -720,7 +708,7 @@ module netAppAccount 'br/public:avm/res/net-app/net-app-account:' = { } ] serviceLevel: 'Premium' - size: 4398046511104 + size: 1 volumes: [ { encryptionKeySource: '' @@ -756,9 +744,7 @@ module netAppAccount 'br/public:avm/res/net-app/net-app-account:' = { ] subnetResourceId: '' usageThreshold: 107374182400 - zones: [ - 1 - ] + zone: 1 } { encryptionKeySource: '' @@ -769,9 +755,7 @@ module netAppAccount 'br/public:avm/res/net-app/net-app-account:' = { ] subnetResourceId: '' usageThreshold: 107374182400 - zones: [ - 1 - ] + zone: 1 } ] } @@ -785,7 +769,7 @@ module netAppAccount 'br/public:avm/res/net-app/net-app-account:' = { } ] serviceLevel: 'Premium' - size: 4398046511104 + size: 1 volumes: [] } ] @@ -853,7 +837,7 @@ module netAppAccount 'br/public:avm/res/net-app/net-app-account:' = { } ], "serviceLevel": "Premium", - "size": 4398046511104, + "size": 1, "volumes": [ { "encryptionKeySource": "", @@ -889,9 +873,7 @@ module netAppAccount 'br/public:avm/res/net-app/net-app-account:' = { ], "subnetResourceId": "", "usageThreshold": 107374182400, - "zones": [ - 1 - ] + "zone": 1 }, { "encryptionKeySource": "", @@ -902,9 +884,7 @@ module netAppAccount 'br/public:avm/res/net-app/net-app-account:' = { ], "subnetResourceId": "", "usageThreshold": 107374182400, - "zones": [ - 1 - ] + "zone": 1 } ] }, @@ -918,7 +898,7 @@ module netAppAccount 'br/public:avm/res/net-app/net-app-account:' = { } ], "serviceLevel": "Premium", - "size": 4398046511104, + "size": 1, "volumes": [] } ] @@ -990,7 +970,7 @@ param capacityPools = [ } ] serviceLevel: 'Premium' - size: 4398046511104 + size: 1 volumes: [ { encryptionKeySource: '' @@ -1026,9 +1006,7 @@ param capacityPools = [ ] subnetResourceId: '' usageThreshold: 107374182400 - zones: [ - 1 - ] + zone: 1 } { encryptionKeySource: '' @@ -1039,9 +1017,7 @@ param capacityPools = [ ] subnetResourceId: '' usageThreshold: 107374182400 - zones: [ - 1 - ] + zone: 1 } ] } @@ -1055,7 +1031,7 @@ param capacityPools = [ } ] serviceLevel: 'Premium' - size: 4398046511104 + size: 1 volumes: [] } ] @@ -1400,7 +1376,7 @@ Capacity pools to create. | Parameter | Type | Description | | :-- | :-- | :-- | | [`name`](#parameter-capacitypoolsname) | string | The name of the capacity pool. | -| [`size`](#parameter-capacitypoolssize) | int | Provisioned size of the pool (in bytes). Allowed values are in 4TiB chunks (value must be multiply of 4398046511104). | +| [`size`](#parameter-capacitypoolssize) | int | Provisioned size of the pool in Tebibytes (TiB). | **Optional parameters** @@ -1424,10 +1400,12 @@ The name of the capacity pool. ### Parameter: `capacityPools.size` -Provisioned size of the pool (in bytes). Allowed values are in 4TiB chunks (value must be multiply of 4398046511104). +Provisioned size of the pool in Tebibytes (TiB). - Required: Yes - Type: int +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.coolAccess` @@ -1435,6 +1413,8 @@ If enabled (true) the pool can contain cool Access enabled volumes. - Required: No - Type: bool +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.encryptionType` @@ -1449,6 +1429,8 @@ Encryption type of the capacity pool, set encryption type for data at rest for t 'Single' ] ``` +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.location` @@ -1456,6 +1438,8 @@ Location of the pool volume. - Required: No - Type: string +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.qosType` @@ -1470,6 +1454,8 @@ The qos type of the pool. 'Manual' ] ``` +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.roleAssignments` @@ -1477,6 +1463,8 @@ Array of role assignments to create. - Required: No - Type: array +- MinValue: 1 +- MaxValue: 2048 - Roles configurable by name: - `'Contributor'` - `'Owner'` @@ -1508,6 +1496,8 @@ The principal ID of the principal (user/group/identity) to assign the role to. - Required: Yes - Type: string +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.roleAssignments.roleDefinitionIdOrName` @@ -1515,6 +1505,8 @@ The role to assign. You can provide either the display name of the role definiti - Required: Yes - Type: string +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.roleAssignments.condition` @@ -1522,6 +1514,8 @@ The conditions on the role assignment. This limits the resources it can be assig - Required: No - Type: string +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.roleAssignments.conditionVersion` @@ -1535,6 +1529,8 @@ Version of the condition. '2.0' ] ``` +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.roleAssignments.delegatedManagedIdentityResourceId` @@ -1542,6 +1538,8 @@ The Resource Id of the delegated managed identity resource. - Required: No - Type: string +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.roleAssignments.description` @@ -1549,6 +1547,8 @@ The description of the role assignment. - Required: No - Type: string +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.roleAssignments.name` @@ -1556,6 +1556,8 @@ The name (as GUID) of the role assignment. If not provided, a GUID will be gener - Required: No - Type: string +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.roleAssignments.principalType` @@ -1573,6 +1575,8 @@ The principal type of the assigned principal ID. 'User' ] ``` +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.serviceLevel` @@ -1589,6 +1593,8 @@ The pool service level. 'Ultra' ] ``` +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.tags` @@ -1596,6 +1602,8 @@ Tags for the capcity pool. - Required: No - Type: object +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.volumes` @@ -1603,6 +1611,8 @@ List of volumes to create in the capacity pool. - Required: No - Type: array +- MinValue: 1 +- MaxValue: 2048 **Required parameters** @@ -1611,6 +1621,7 @@ List of volumes to create in the capacity pool. | [`name`](#parameter-capacitypoolsvolumesname) | string | The name of the pool volume. | | [`subnetResourceId`](#parameter-capacitypoolsvolumessubnetresourceid) | string | The Azure Resource URI for a delegated subnet. Must have the delegation Microsoft.NetApp/volumes. | | [`usageThreshold`](#parameter-capacitypoolsvolumesusagethreshold) | int | Maximum storage quota allowed for a file system in bytes. | +| [`zone`](#parameter-capacitypoolsvolumeszone) | int | The Availability Zone to place the resource in. If set to 0, then Availability Zone is not set. | **Optional parameters** @@ -1627,14 +1638,13 @@ List of volumes to create in the capacity pool. | [`keyVaultPrivateEndpointResourceId`](#parameter-capacitypoolsvolumeskeyvaultprivateendpointresourceid) | string | The resource ID of the key vault private endpoint. | | [`location`](#parameter-capacitypoolsvolumeslocation) | string | Location of the pool volume. | | [`networkFeatures`](#parameter-capacitypoolsvolumesnetworkfeatures) | string | Network feature for the volume. | -| [`protocolTypes`](#parameter-capacitypoolsvolumesprotocoltypes) | array | Set of protocol types. | +| [`protocolTypes`](#parameter-capacitypoolsvolumesprotocoltypes) | array | Set of protocol types. Default value is `['NFSv3']`. If you are creating a dual-stack volume, set either `['NFSv3','CIFS']` or `['NFSv4.1','CIFS']`. | | [`roleAssignments`](#parameter-capacitypoolsvolumesroleassignments) | array | Array of role assignments to create. | | [`serviceLevel`](#parameter-capacitypoolsvolumesservicelevel) | string | The pool service level. Must match the one of the parent capacity pool. | | [`smbContinuouslyAvailable`](#parameter-capacitypoolsvolumessmbcontinuouslyavailable) | bool | Enables continuously available share property for SMB volume. Only applicable for SMB volume. | | [`smbEncryption`](#parameter-capacitypoolsvolumessmbencryption) | bool | Enables SMB encryption. Only applicable for SMB/DualProtocol volume. | | [`smbNonBrowsable`](#parameter-capacitypoolsvolumessmbnonbrowsable) | string | Enables non-browsable property for SMB Shares. Only applicable for SMB/DualProtocol volume. | | [`volumeType`](#parameter-capacitypoolsvolumesvolumetype) | string | The type of the volume. DataProtection volumes are used for replication. | -| [`zones`](#parameter-capacitypoolsvolumeszones) | array | Zone where the volume will be placed. | ### Parameter: `capacityPools.volumes.name` @@ -1642,6 +1652,8 @@ The name of the pool volume. - Required: Yes - Type: string +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.volumes.subnetResourceId` @@ -1649,6 +1661,8 @@ The Azure Resource URI for a delegated subnet. Must have the delegation Microsof - Required: Yes - Type: string +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.volumes.usageThreshold` @@ -1656,6 +1670,17 @@ Maximum storage quota allowed for a file system in bytes. - Required: Yes - Type: int +- MinValue: 1 +- MaxValue: 2048 + +### Parameter: `capacityPools.volumes.zone` + +The Availability Zone to place the resource in. If set to 0, then Availability Zone is not set. + +- Required: Yes +- Type: int +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.volumes.coolAccess` @@ -1663,6 +1688,8 @@ If enabled (true) the pool can contain cool Access enabled volumes. - Required: No - Type: bool +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.volumes.coolAccessRetrievalPolicy` @@ -1670,6 +1697,8 @@ Determines the data retrieval behavior from the cool tier to standard storage ba - Required: No - Type: string +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.volumes.coolnessPeriod` @@ -1677,6 +1706,8 @@ Specifies the number of days after which data that is not accessed by clients wi - Required: No - Type: int +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.volumes.creationToken` @@ -1684,6 +1715,8 @@ A unique file path for the volume. This is the name of the volume export. A volu - Required: No - Type: string +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.volumes.dataProtection` @@ -1691,6 +1724,8 @@ DataProtection type volumes include an object containing details of the replicat - Required: No - Type: object +- MinValue: 1 +- MaxValue: 2048 **Optional parameters** @@ -1706,6 +1741,8 @@ Backup properties. - Required: No - Type: object +- MinValue: 1 +- MaxValue: 2048 **Required parameters** @@ -1721,6 +1758,8 @@ The name of the backup policy to link. - Required: Yes - Type: string +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.volumes.dataProtection.backup.backupVaultName` @@ -1728,6 +1767,8 @@ The name of the Backup Vault. - Required: Yes - Type: string +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.volumes.dataProtection.backup.policyEnforced` @@ -1735,6 +1776,8 @@ Enable to enforce the policy. - Required: Yes - Type: bool +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.volumes.dataProtection.replication` @@ -1742,6 +1785,8 @@ Replication properties. - Required: No - Type: object +- MinValue: 1 +- MaxValue: 2048 **Required parameters** @@ -1771,6 +1816,8 @@ Indicates whether the local volume is the source or destination for the Volume R 'src' ] ``` +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.volumes.dataProtection.replication.replicationSchedule` @@ -1786,6 +1833,8 @@ The replication schedule for the volume. 'hourly' ] ``` +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.volumes.dataProtection.replication.remotePath` @@ -1793,6 +1842,8 @@ The full path to a volume that is to be migrated into ANF. Required for Migratio - Required: No - Type: object +- MinValue: 1 +- MaxValue: 2048 **Required parameters** @@ -1808,6 +1859,8 @@ The Path to a ONTAP Host. - Required: Yes - Type: string +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.volumes.dataProtection.replication.remotePath.serverName` @@ -1815,6 +1868,8 @@ The name of a server on the ONTAP Host. - Required: Yes - Type: string +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.volumes.dataProtection.replication.remotePath.volumeName` @@ -1822,6 +1877,8 @@ The name of a volume on the server. - Required: Yes - Type: string +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.volumes.dataProtection.replication.remoteVolumeRegion` @@ -1829,6 +1886,8 @@ The remote region for the other end of the Volume Replication.Required for Data - Required: No - Type: string +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.volumes.dataProtection.replication.remoteVolumeResourceId` @@ -1836,6 +1895,8 @@ The resource ID of the remote volume. Required for Data Protection volumes. - Required: No - Type: string +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.volumes.dataProtection.snapshot` @@ -1843,6 +1904,8 @@ Snapshot properties. - Required: No - Type: object +- MinValue: 1 +- MaxValue: 2048 **Required parameters** @@ -1856,6 +1919,8 @@ The name of the snapshot policy to link. - Required: Yes - Type: string +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.volumes.encryptionKeySource` @@ -1863,6 +1928,8 @@ The source of the encryption key. - Required: No - Type: string +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.volumes.exportPolicy` @@ -1870,6 +1937,8 @@ Export policy rules. - Required: No - Type: object +- MinValue: 1 +- MaxValue: 2048 **Required parameters** @@ -1883,6 +1952,8 @@ The Export policy rules. - Required: Yes - Type: array +- MinValue: 1 +- MaxValue: 2048 **Required parameters** @@ -1915,6 +1986,8 @@ Kerberos5i Read only access. - Required: Yes - Type: bool +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.volumes.exportPolicy.rules.kerberos5iReadWrite` @@ -1922,6 +1995,8 @@ Kerberos5i Read and write access. - Required: Yes - Type: bool +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.volumes.exportPolicy.rules.kerberos5pReadOnly` @@ -1929,6 +2004,8 @@ Kerberos5p Read only access. - Required: Yes - Type: bool +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.volumes.exportPolicy.rules.kerberos5pReadWrite` @@ -1936,6 +2013,8 @@ Kerberos5p Read and write access. - Required: Yes - Type: bool +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.volumes.exportPolicy.rules.kerberos5ReadOnly` @@ -1943,6 +2022,8 @@ Kerberos5 Read only access. - Required: Yes - Type: bool +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.volumes.exportPolicy.rules.kerberos5ReadWrite` @@ -1950,6 +2031,8 @@ Kerberos5 Read and write access. - Required: Yes - Type: bool +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.volumes.exportPolicy.rules.nfsv3` @@ -1957,6 +2040,8 @@ Allows NFSv3 protocol. Enable only for NFSv3 type volumes. - Required: Yes - Type: bool +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.volumes.exportPolicy.rules.nfsv41` @@ -1964,6 +2049,8 @@ Allows NFSv4.1 protocol. Enable only for NFSv4.1 type volumes. - Required: Yes - Type: bool +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.volumes.exportPolicy.rules.ruleIndex` @@ -1971,6 +2058,8 @@ Order index. - Required: Yes - Type: int +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.volumes.exportPolicy.rules.unixReadOnly` @@ -1978,6 +2067,8 @@ Read only access. - Required: Yes - Type: bool +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.volumes.exportPolicy.rules.unixReadWrite` @@ -1985,6 +2076,8 @@ Read and write access. - Required: Yes - Type: bool +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.volumes.exportPolicy.rules.allowedClients` @@ -1992,6 +2085,8 @@ Client ingress specification as comma separated string with IPv4 CIDRs, IPv4 hos - Required: No - Type: string +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.volumes.exportPolicy.rules.chownMode` @@ -2006,6 +2101,8 @@ This parameter specifies who is authorized to change the ownership of a file. re 'Unrestricted' ] ``` +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.volumes.exportPolicy.rules.cifs` @@ -2013,6 +2110,8 @@ Allows CIFS protocol. - Required: No - Type: bool +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.volumes.exportPolicy.rules.hasRootAccess` @@ -2020,6 +2119,8 @@ Has root access to volume. - Required: No - Type: bool +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.volumes.kerberosEnabled` @@ -2027,6 +2128,8 @@ Define if a volume is KerberosEnabled. - Required: No - Type: bool +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.volumes.keyVaultPrivateEndpointResourceId` @@ -2034,6 +2137,8 @@ The resource ID of the key vault private endpoint. - Required: No - Type: string +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.volumes.location` @@ -2041,6 +2146,8 @@ Location of the pool volume. - Required: No - Type: string +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.volumes.networkFeatures` @@ -2057,13 +2164,25 @@ Network feature for the volume. 'Standard_Basic' ] ``` +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.volumes.protocolTypes` -Set of protocol types. +Set of protocol types. Default value is `['NFSv3']`. If you are creating a dual-stack volume, set either `['NFSv3','CIFS']` or `['NFSv4.1','CIFS']`. - Required: No - Type: array +- Allowed: + ```Bicep + [ + 'CIFS' + 'NFSv3' + 'NFSv4.1' + ] + ``` +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.volumes.roleAssignments` @@ -2071,6 +2190,8 @@ Array of role assignments to create. - Required: No - Type: array +- MinValue: 1 +- MaxValue: 2048 - Roles configurable by name: - `'Contributor'` - `'Owner'` @@ -2102,6 +2223,8 @@ The principal ID of the principal (user/group/identity) to assign the role to. - Required: Yes - Type: string +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.volumes.roleAssignments.roleDefinitionIdOrName` @@ -2109,6 +2232,8 @@ The role to assign. You can provide either the display name of the role definiti - Required: Yes - Type: string +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.volumes.roleAssignments.condition` @@ -2116,6 +2241,8 @@ The conditions on the role assignment. This limits the resources it can be assig - Required: No - Type: string +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.volumes.roleAssignments.conditionVersion` @@ -2129,6 +2256,8 @@ Version of the condition. '2.0' ] ``` +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.volumes.roleAssignments.delegatedManagedIdentityResourceId` @@ -2136,6 +2265,8 @@ The Resource Id of the delegated managed identity resource. - Required: No - Type: string +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.volumes.roleAssignments.description` @@ -2143,6 +2274,8 @@ The description of the role assignment. - Required: No - Type: string +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.volumes.roleAssignments.name` @@ -2150,6 +2283,8 @@ The name (as GUID) of the role assignment. If not provided, a GUID will be gener - Required: No - Type: string +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.volumes.roleAssignments.principalType` @@ -2167,6 +2302,8 @@ The principal type of the assigned principal ID. 'User' ] ``` +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.volumes.serviceLevel` @@ -2183,6 +2320,8 @@ The pool service level. Must match the one of the parent capacity pool. 'Ultra' ] ``` +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.volumes.smbContinuouslyAvailable` @@ -2190,6 +2329,8 @@ Enables continuously available share property for SMB volume. Only applicable fo - Required: No - Type: bool +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.volumes.smbEncryption` @@ -2197,6 +2338,8 @@ Enables SMB encryption. Only applicable for SMB/DualProtocol volume. - Required: No - Type: bool +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.volumes.smbNonBrowsable` @@ -2211,6 +2354,8 @@ Enables non-browsable property for SMB Shares. Only applicable for SMB/DualProto 'Enabled' ] ``` +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `capacityPools.volumes.volumeType` @@ -2218,13 +2363,8 @@ The type of the volume. DataProtection volumes are used for replication. - Required: No - Type: string - -### Parameter: `capacityPools.volumes.zones` - -Zone where the volume will be placed. - -- Required: No -- Type: array +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `customerManagedKey` diff --git a/avm/res/net-app/net-app-account/backup-policies/main.json b/avm/res/net-app/net-app-account/backup-policies/main.json index a77278bec5..bf9e05128b 100644 --- a/avm/res/net-app/net-app-account/backup-policies/main.json +++ b/avm/res/net-app/net-app-account/backup-policies/main.json @@ -4,8 +4,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.33.13.18514", - "templateHash": "7141176618644423280" + "version": "0.33.93.31351", + "templateHash": "2748634922557584170" }, "name": "Azure NetApp Files Backup Policy", "description": "This module deploys a Backup Policy for Azure NetApp File." diff --git a/avm/res/net-app/net-app-account/backup-vault/backup/main.json b/avm/res/net-app/net-app-account/backup-vault/backup/main.json index 5257b0d5ab..60bf6bd3d6 100644 --- a/avm/res/net-app/net-app-account/backup-vault/backup/main.json +++ b/avm/res/net-app/net-app-account/backup-vault/backup/main.json @@ -5,8 +5,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.33.13.18514", - "templateHash": "3948084235912412629" + "version": "0.33.93.31351", + "templateHash": "17452697444375969559" }, "name": "Azure NetApp Files Volume Backup", "description": "This module deploys a backup of a NetApp Files Volume." diff --git a/avm/res/net-app/net-app-account/backup-vault/main.json b/avm/res/net-app/net-app-account/backup-vault/main.json index 7a827614d8..5dc20c4027 100644 --- a/avm/res/net-app/net-app-account/backup-vault/main.json +++ b/avm/res/net-app/net-app-account/backup-vault/main.json @@ -5,8 +5,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.33.13.18514", - "templateHash": "9738469557677047438" + "version": "0.33.93.31351", + "templateHash": "6704781490326075849" }, "name": "Azure NetApp Files Volume Backup Vault", "description": "This module deploys a NetApp Files Backup Vault." @@ -144,8 +144,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.33.13.18514", - "templateHash": "3948084235912412629" + "version": "0.33.93.31351", + "templateHash": "17452697444375969559" }, "name": "Azure NetApp Files Volume Backup", "description": "This module deploys a backup of a NetApp Files Volume." diff --git a/avm/res/net-app/net-app-account/capacity-pool/README.md b/avm/res/net-app/net-app-account/capacity-pool/README.md index 092e072e7e..58beb2547c 100644 --- a/avm/res/net-app/net-app-account/capacity-pool/README.md +++ b/avm/res/net-app/net-app-account/capacity-pool/README.md @@ -24,7 +24,7 @@ This module deploys an Azure NetApp Files Capacity Pool. | Parameter | Type | Description | | :-- | :-- | :-- | | [`name`](#parameter-name) | string | The name of the capacity pool. | -| [`size`](#parameter-size) | int | Provisioned size of the pool (in bytes). Allowed values are in 4TiB chunks (value must be multiply of 4398046511104). | +| [`size`](#parameter-size) | int | Provisioned size of the pool in Tebibytes (TiB). | **Conditional parameters** @@ -54,10 +54,12 @@ The name of the capacity pool. ### Parameter: `size` -Provisioned size of the pool (in bytes). Allowed values are in 4TiB chunks (value must be multiply of 4398046511104). +Provisioned size of the pool in Tebibytes (TiB). - Required: Yes - Type: int +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `netAppAccountName` @@ -65,6 +67,8 @@ The name of the parent NetApp account. Required if the template is used in a sta - Required: Yes - Type: string +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `coolAccess` @@ -73,6 +77,8 @@ If enabled (true) the pool can contain cool Access enabled volumes. - Required: No - Type: bool - Default: `False` +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `encryptionType` @@ -88,6 +94,8 @@ Encryption type of the capacity pool, set encryption type for data at rest for t 'Single' ] ``` +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `location` @@ -96,6 +104,8 @@ Location of the pool volume. - Required: No - Type: string - Default: `[resourceGroup().location]` +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `qosType` @@ -111,6 +121,8 @@ The qos type of the pool. 'Manual' ] ``` +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `roleAssignments` @@ -118,6 +130,8 @@ Array of role assignments to create. - Required: No - Type: array +- MinValue: 1 +- MaxValue: 2048 - Roles configurable by name: - `'Contributor'` - `'Owner'` @@ -149,6 +163,8 @@ The principal ID of the principal (user/group/identity) to assign the role to. - Required: Yes - Type: string +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `roleAssignments.roleDefinitionIdOrName` @@ -156,6 +172,8 @@ The role to assign. You can provide either the display name of the role definiti - Required: Yes - Type: string +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `roleAssignments.condition` @@ -163,6 +181,8 @@ The conditions on the role assignment. This limits the resources it can be assig - Required: No - Type: string +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `roleAssignments.conditionVersion` @@ -176,6 +196,8 @@ Version of the condition. '2.0' ] ``` +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `roleAssignments.delegatedManagedIdentityResourceId` @@ -183,6 +205,8 @@ The Resource Id of the delegated managed identity resource. - Required: No - Type: string +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `roleAssignments.description` @@ -190,6 +214,8 @@ The description of the role assignment. - Required: No - Type: string +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `roleAssignments.name` @@ -197,6 +223,8 @@ The name (as GUID) of the role assignment. If not provided, a GUID will be gener - Required: No - Type: string +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `roleAssignments.principalType` @@ -214,6 +242,8 @@ The principal type of the assigned principal ID. 'User' ] ``` +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `serviceLevel` @@ -231,6 +261,8 @@ The pool service level. 'Ultra' ] ``` +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `tags` @@ -238,6 +270,8 @@ Tags for all resources. - Required: No - Type: object +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `volumes` @@ -245,6 +279,8 @@ List of volumes to create in the capacity pool. - Required: No - Type: array +- MinValue: 1 +- MaxValue: 2048 **Required parameters** @@ -253,6 +289,7 @@ List of volumes to create in the capacity pool. | [`name`](#parameter-volumesname) | string | The name of the pool volume. | | [`subnetResourceId`](#parameter-volumessubnetresourceid) | string | The Azure Resource URI for a delegated subnet. Must have the delegation Microsoft.NetApp/volumes. | | [`usageThreshold`](#parameter-volumesusagethreshold) | int | Maximum storage quota allowed for a file system in bytes. | +| [`zone`](#parameter-volumeszone) | int | The Availability Zone to place the resource in. If set to 0, then Availability Zone is not set. | **Optional parameters** @@ -269,14 +306,13 @@ List of volumes to create in the capacity pool. | [`keyVaultPrivateEndpointResourceId`](#parameter-volumeskeyvaultprivateendpointresourceid) | string | The resource ID of the key vault private endpoint. | | [`location`](#parameter-volumeslocation) | string | Location of the pool volume. | | [`networkFeatures`](#parameter-volumesnetworkfeatures) | string | Network feature for the volume. | -| [`protocolTypes`](#parameter-volumesprotocoltypes) | array | Set of protocol types. | +| [`protocolTypes`](#parameter-volumesprotocoltypes) | array | Set of protocol types. Default value is `['NFSv3']`. If you are creating a dual-stack volume, set either `['NFSv3','CIFS']` or `['NFSv4.1','CIFS']`. | | [`roleAssignments`](#parameter-volumesroleassignments) | array | Array of role assignments to create. | | [`serviceLevel`](#parameter-volumesservicelevel) | string | The pool service level. Must match the one of the parent capacity pool. | | [`smbContinuouslyAvailable`](#parameter-volumessmbcontinuouslyavailable) | bool | Enables continuously available share property for SMB volume. Only applicable for SMB volume. | | [`smbEncryption`](#parameter-volumessmbencryption) | bool | Enables SMB encryption. Only applicable for SMB/DualProtocol volume. | | [`smbNonBrowsable`](#parameter-volumessmbnonbrowsable) | string | Enables non-browsable property for SMB Shares. Only applicable for SMB/DualProtocol volume. | | [`volumeType`](#parameter-volumesvolumetype) | string | The type of the volume. DataProtection volumes are used for replication. | -| [`zones`](#parameter-volumeszones) | array | Zone where the volume will be placed. | ### Parameter: `volumes.name` @@ -284,6 +320,8 @@ The name of the pool volume. - Required: Yes - Type: string +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `volumes.subnetResourceId` @@ -291,6 +329,8 @@ The Azure Resource URI for a delegated subnet. Must have the delegation Microsof - Required: Yes - Type: string +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `volumes.usageThreshold` @@ -298,6 +338,17 @@ Maximum storage quota allowed for a file system in bytes. - Required: Yes - Type: int +- MinValue: 1 +- MaxValue: 2048 + +### Parameter: `volumes.zone` + +The Availability Zone to place the resource in. If set to 0, then Availability Zone is not set. + +- Required: Yes +- Type: int +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `volumes.coolAccess` @@ -305,6 +356,8 @@ If enabled (true) the pool can contain cool Access enabled volumes. - Required: No - Type: bool +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `volumes.coolAccessRetrievalPolicy` @@ -312,6 +365,8 @@ Determines the data retrieval behavior from the cool tier to standard storage ba - Required: No - Type: string +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `volumes.coolnessPeriod` @@ -319,6 +374,8 @@ Specifies the number of days after which data that is not accessed by clients wi - Required: No - Type: int +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `volumes.creationToken` @@ -326,6 +383,8 @@ A unique file path for the volume. This is the name of the volume export. A volu - Required: No - Type: string +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `volumes.dataProtection` @@ -333,6 +392,8 @@ DataProtection type volumes include an object containing details of the replicat - Required: No - Type: object +- MinValue: 1 +- MaxValue: 2048 **Optional parameters** @@ -348,6 +409,8 @@ Backup properties. - Required: No - Type: object +- MinValue: 1 +- MaxValue: 2048 **Required parameters** @@ -363,6 +426,8 @@ The name of the backup policy to link. - Required: Yes - Type: string +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `volumes.dataProtection.backup.backupVaultName` @@ -370,6 +435,8 @@ The name of the Backup Vault. - Required: Yes - Type: string +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `volumes.dataProtection.backup.policyEnforced` @@ -377,6 +444,8 @@ Enable to enforce the policy. - Required: Yes - Type: bool +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `volumes.dataProtection.replication` @@ -384,6 +453,8 @@ Replication properties. - Required: No - Type: object +- MinValue: 1 +- MaxValue: 2048 **Required parameters** @@ -413,6 +484,8 @@ Indicates whether the local volume is the source or destination for the Volume R 'src' ] ``` +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `volumes.dataProtection.replication.replicationSchedule` @@ -428,6 +501,8 @@ The replication schedule for the volume. 'hourly' ] ``` +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `volumes.dataProtection.replication.remotePath` @@ -435,6 +510,8 @@ The full path to a volume that is to be migrated into ANF. Required for Migratio - Required: No - Type: object +- MinValue: 1 +- MaxValue: 2048 **Required parameters** @@ -450,6 +527,8 @@ The Path to a ONTAP Host. - Required: Yes - Type: string +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `volumes.dataProtection.replication.remotePath.serverName` @@ -457,6 +536,8 @@ The name of a server on the ONTAP Host. - Required: Yes - Type: string +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `volumes.dataProtection.replication.remotePath.volumeName` @@ -464,6 +545,8 @@ The name of a volume on the server. - Required: Yes - Type: string +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `volumes.dataProtection.replication.remoteVolumeRegion` @@ -471,6 +554,8 @@ The remote region for the other end of the Volume Replication.Required for Data - Required: No - Type: string +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `volumes.dataProtection.replication.remoteVolumeResourceId` @@ -478,6 +563,8 @@ The resource ID of the remote volume. Required for Data Protection volumes. - Required: No - Type: string +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `volumes.dataProtection.snapshot` @@ -485,6 +572,8 @@ Snapshot properties. - Required: No - Type: object +- MinValue: 1 +- MaxValue: 2048 **Required parameters** @@ -498,6 +587,8 @@ The name of the snapshot policy to link. - Required: Yes - Type: string +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `volumes.encryptionKeySource` @@ -505,6 +596,8 @@ The source of the encryption key. - Required: No - Type: string +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `volumes.exportPolicy` @@ -512,6 +605,8 @@ Export policy rules. - Required: No - Type: object +- MinValue: 1 +- MaxValue: 2048 **Required parameters** @@ -525,6 +620,8 @@ The Export policy rules. - Required: Yes - Type: array +- MinValue: 1 +- MaxValue: 2048 **Required parameters** @@ -557,6 +654,8 @@ Kerberos5i Read only access. - Required: Yes - Type: bool +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `volumes.exportPolicy.rules.kerberos5iReadWrite` @@ -564,6 +663,8 @@ Kerberos5i Read and write access. - Required: Yes - Type: bool +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `volumes.exportPolicy.rules.kerberos5pReadOnly` @@ -571,6 +672,8 @@ Kerberos5p Read only access. - Required: Yes - Type: bool +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `volumes.exportPolicy.rules.kerberos5pReadWrite` @@ -578,6 +681,8 @@ Kerberos5p Read and write access. - Required: Yes - Type: bool +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `volumes.exportPolicy.rules.kerberos5ReadOnly` @@ -585,6 +690,8 @@ Kerberos5 Read only access. - Required: Yes - Type: bool +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `volumes.exportPolicy.rules.kerberos5ReadWrite` @@ -592,6 +699,8 @@ Kerberos5 Read and write access. - Required: Yes - Type: bool +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `volumes.exportPolicy.rules.nfsv3` @@ -599,6 +708,8 @@ Allows NFSv3 protocol. Enable only for NFSv3 type volumes. - Required: Yes - Type: bool +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `volumes.exportPolicy.rules.nfsv41` @@ -606,6 +717,8 @@ Allows NFSv4.1 protocol. Enable only for NFSv4.1 type volumes. - Required: Yes - Type: bool +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `volumes.exportPolicy.rules.ruleIndex` @@ -613,6 +726,8 @@ Order index. - Required: Yes - Type: int +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `volumes.exportPolicy.rules.unixReadOnly` @@ -620,6 +735,8 @@ Read only access. - Required: Yes - Type: bool +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `volumes.exportPolicy.rules.unixReadWrite` @@ -627,6 +744,8 @@ Read and write access. - Required: Yes - Type: bool +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `volumes.exportPolicy.rules.allowedClients` @@ -634,6 +753,8 @@ Client ingress specification as comma separated string with IPv4 CIDRs, IPv4 hos - Required: No - Type: string +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `volumes.exportPolicy.rules.chownMode` @@ -648,6 +769,8 @@ This parameter specifies who is authorized to change the ownership of a file. re 'Unrestricted' ] ``` +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `volumes.exportPolicy.rules.cifs` @@ -655,6 +778,8 @@ Allows CIFS protocol. - Required: No - Type: bool +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `volumes.exportPolicy.rules.hasRootAccess` @@ -662,6 +787,8 @@ Has root access to volume. - Required: No - Type: bool +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `volumes.kerberosEnabled` @@ -669,6 +796,8 @@ Define if a volume is KerberosEnabled. - Required: No - Type: bool +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `volumes.keyVaultPrivateEndpointResourceId` @@ -676,6 +805,8 @@ The resource ID of the key vault private endpoint. - Required: No - Type: string +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `volumes.location` @@ -683,6 +814,8 @@ Location of the pool volume. - Required: No - Type: string +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `volumes.networkFeatures` @@ -699,13 +832,25 @@ Network feature for the volume. 'Standard_Basic' ] ``` +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `volumes.protocolTypes` -Set of protocol types. +Set of protocol types. Default value is `['NFSv3']`. If you are creating a dual-stack volume, set either `['NFSv3','CIFS']` or `['NFSv4.1','CIFS']`. - Required: No - Type: array +- Allowed: + ```Bicep + [ + 'CIFS' + 'NFSv3' + 'NFSv4.1' + ] + ``` +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `volumes.roleAssignments` @@ -713,6 +858,8 @@ Array of role assignments to create. - Required: No - Type: array +- MinValue: 1 +- MaxValue: 2048 - Roles configurable by name: - `'Contributor'` - `'Owner'` @@ -744,6 +891,8 @@ The principal ID of the principal (user/group/identity) to assign the role to. - Required: Yes - Type: string +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `volumes.roleAssignments.roleDefinitionIdOrName` @@ -751,6 +900,8 @@ The role to assign. You can provide either the display name of the role definiti - Required: Yes - Type: string +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `volumes.roleAssignments.condition` @@ -758,6 +909,8 @@ The conditions on the role assignment. This limits the resources it can be assig - Required: No - Type: string +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `volumes.roleAssignments.conditionVersion` @@ -771,6 +924,8 @@ Version of the condition. '2.0' ] ``` +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `volumes.roleAssignments.delegatedManagedIdentityResourceId` @@ -778,6 +933,8 @@ The Resource Id of the delegated managed identity resource. - Required: No - Type: string +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `volumes.roleAssignments.description` @@ -785,6 +942,8 @@ The description of the role assignment. - Required: No - Type: string +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `volumes.roleAssignments.name` @@ -792,6 +951,8 @@ The name (as GUID) of the role assignment. If not provided, a GUID will be gener - Required: No - Type: string +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `volumes.roleAssignments.principalType` @@ -809,6 +970,8 @@ The principal type of the assigned principal ID. 'User' ] ``` +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `volumes.serviceLevel` @@ -825,6 +988,8 @@ The pool service level. Must match the one of the parent capacity pool. 'Ultra' ] ``` +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `volumes.smbContinuouslyAvailable` @@ -832,6 +997,8 @@ Enables continuously available share property for SMB volume. Only applicable fo - Required: No - Type: bool +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `volumes.smbEncryption` @@ -839,6 +1006,8 @@ Enables SMB encryption. Only applicable for SMB/DualProtocol volume. - Required: No - Type: bool +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `volumes.smbNonBrowsable` @@ -853,6 +1022,8 @@ Enables non-browsable property for SMB Shares. Only applicable for SMB/DualProto 'Enabled' ] ``` +- MinValue: 1 +- MaxValue: 2048 ### Parameter: `volumes.volumeType` @@ -860,13 +1031,8 @@ The type of the volume. DataProtection volumes are used for replication. - Required: No - Type: string - -### Parameter: `volumes.zones` - -Zone where the volume will be placed. - -- Required: No -- Type: array +- MinValue: 1 +- MaxValue: 2048 ## Outputs diff --git a/avm/res/net-app/net-app-account/capacity-pool/main.bicep b/avm/res/net-app/net-app-account/capacity-pool/main.bicep index 16f124f16f..f93775dd46 100644 --- a/avm/res/net-app/net-app-account/capacity-pool/main.bicep +++ b/avm/res/net-app/net-app-account/capacity-pool/main.bicep @@ -22,7 +22,9 @@ param tags object? ]) param serviceLevel string = 'Standard' -@description('Required. Provisioned size of the pool (in bytes). Allowed values are in 4TiB chunks (value must be multiply of 4398046511104).') +@description('Required. Provisioned size of the pool in Tebibytes (TiB).') +@minValue(1) +@maxValue(2048) param size int @description('Optional. The qos type of the pool.') @@ -85,7 +87,7 @@ resource capacityPool 'Microsoft.NetApp/netAppAccounts/capacityPools@2024-07-01' tags: tags properties: { serviceLevel: serviceLevel - size: size + size: tebibytesToBytes(size) qosType: qosType coolAccess: coolAccess encryptionType: encryptionType @@ -104,12 +106,12 @@ module capacityPool_volumes 'volume/main.bicep' = [ serviceLevel: serviceLevel creationToken: volume.?creationToken ?? volume.name usageThreshold: volume.usageThreshold - protocolTypes: volume.?protocolTypes + protocolTypes: volume.protocolTypes subnetResourceId: volume.subnetResourceId exportPolicy: volume.?exportPolicy roleAssignments: volume.?roleAssignments networkFeatures: volume.?networkFeatures - zones: volume.?zones + zone: volume.?availabilityZone coolAccess: volume.?coolAccess ?? false coolAccessRetrievalPolicy: volume.?coolAccessRetrievalPolicy coolnessPeriod: volume.?coolnessPeriod @@ -190,8 +192,14 @@ type volumeType = { @description('Optional. Location of the pool volume.') location: string? - @description('Optional. Zone where the volume will be placed.') - zones: int[]? + @description('Required. The Availability Zone to place the resource in. If set to 0, then Availability Zone is not set.') + @sys.allowed([ + 0 + 1 + 2 + 3 + ]) + zone: int @description('Optional. The pool service level. Must match the one of the parent capacity pool.') serviceLevel: ('Premium' | 'Standard' | 'StandardZRS' | 'Ultra')? @@ -205,8 +213,8 @@ type volumeType = { @description('Required. Maximum storage quota allowed for a file system in bytes.') usageThreshold: int - @description('Optional. Set of protocol types.') - protocolTypes: string[]? + @description('Optional. Set of protocol types. Default value is `[\'NFSv3\']`. If you are creating a dual-stack volume, set either `[\'NFSv3\',\'CIFS\']` or `[\'NFSv4.1\',\'CIFS\']`.') + protocolTypes: ('NFSv3' | 'NFSv4.1' | 'CIFS')[]? @description('Required. The Azure Resource URI for a delegated subnet. Must have the delegation Microsoft.NetApp/volumes.') subnetResourceId: string @@ -232,3 +240,10 @@ type volumeType = { @description('Optional. The type of the volume. DataProtection volumes are used for replication.') volumeType: string? } + +// ================ // +// Functions // +// ================ // + +@description('Converts from tebibytes to bytes.') +func tebibytesToBytes(tebibytes int) int => tebibytes * 1024 * 1024 * 1024 * 1024 diff --git a/avm/res/net-app/net-app-account/capacity-pool/main.json b/avm/res/net-app/net-app-account/capacity-pool/main.json index 6c3e2b32c1..55f6a3e10c 100644 --- a/avm/res/net-app/net-app-account/capacity-pool/main.json +++ b/avm/res/net-app/net-app-account/capacity-pool/main.json @@ -5,8 +5,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.33.13.18514", - "templateHash": "9255104616647372037" + "version": "0.33.93.31351", + "templateHash": "567288787230162458" }, "name": "Azure NetApp Files Capacity Pools", "description": "This module deploys an Azure NetApp Files Capacity Pool." @@ -70,14 +70,10 @@ "description": "Optional. Location of the pool volume." } }, - "zones": { - "type": "array", - "items": { - "type": "int" - }, - "nullable": true, + "zone": { + "type": "int", "metadata": { - "description": "Optional. Zone where the volume will be placed." + "description": "Required. The Availability Zone to place the resource in. If set to 0, then Availability Zone is not set." } }, "serviceLevel": { @@ -121,12 +117,14 @@ }, "protocolTypes": { "type": "array", - "items": { - "type": "string" - }, + "allowedValues": [ + "CIFS", + "NFSv3", + "NFSv4.1" + ], "nullable": true, "metadata": { - "description": "Optional. Set of protocol types." + "description": "Optional. Set of protocol types. Default value is `['NFSv3']`. If you are creating a dual-stack volume, set either `['NFSv3','CIFS']` or `['NFSv4.1','CIFS']`." } }, "subnetResourceId": { @@ -544,6 +542,28 @@ } } }, + "functions": [ + { + "namespace": "__bicep", + "members": { + "tebibytesToBytes": { + "parameters": [ + { + "type": "int", + "name": "tebibytes" + } + ], + "output": { + "type": "int", + "value": "[mul(mul(mul(mul(parameters('tebibytes'), 1024), 1024), 1024), 1024)]" + }, + "metadata": { + "description": "Converts from tebibytes to bytes." + } + } + } + } + ], "parameters": { "netAppAccountName": { "type": "string", @@ -586,8 +606,10 @@ }, "size": { "type": "int", + "minValue": 1, + "maxValue": 2048, "metadata": { - "description": "Required. Provisioned size of the pool (in bytes). Allowed values are in 4TiB chunks (value must be multiply of 4398046511104)." + "description": "Required. Provisioned size of the pool in Tebibytes (TiB)." } }, "qosType": { @@ -671,7 +693,7 @@ "tags": "[parameters('tags')]", "properties": { "serviceLevel": "[parameters('serviceLevel')]", - "size": "[parameters('size')]", + "size": "[__bicep.tebibytesToBytes(parameters('size'))]", "qosType": "[parameters('qosType')]", "coolAccess": "[parameters('coolAccess')]", "encryptionType": "[parameters('encryptionType')]" @@ -737,7 +759,7 @@ "value": "[coalesce(parameters('volumes'), createArray())[copyIndex()].usageThreshold]" }, "protocolTypes": { - "value": "[tryGet(coalesce(parameters('volumes'), createArray())[copyIndex()], 'protocolTypes')]" + "value": "[coalesce(parameters('volumes'), createArray())[copyIndex()].protocolTypes]" }, "subnetResourceId": { "value": "[coalesce(parameters('volumes'), createArray())[copyIndex()].subnetResourceId]" @@ -751,8 +773,8 @@ "networkFeatures": { "value": "[tryGet(coalesce(parameters('volumes'), createArray())[copyIndex()], 'networkFeatures')]" }, - "zones": { - "value": "[tryGet(coalesce(parameters('volumes'), createArray())[copyIndex()], 'zones')]" + "zone": { + "value": "[tryGet(coalesce(parameters('volumes'), createArray())[copyIndex()], 'availabilityZone')]" }, "coolAccess": { "value": "[coalesce(tryGet(coalesce(parameters('volumes'), createArray())[copyIndex()], 'coolAccess'), false())]" @@ -795,8 +817,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.33.13.18514", - "templateHash": "13717060947862126529" + "version": "0.33.93.31351", + "templateHash": "9908729682088720878" }, "name": "Azure NetApp Files Capacity Pool Volumes", "description": "This module deploys an Azure NetApp Files Capacity Pool Volume." @@ -1202,18 +1224,16 @@ "description": "Optional. The type of the volume. DataProtection volumes are used for replication." } }, - "zones": { - "type": "array", - "items": { - "type": "int" - }, - "defaultValue": [ + "zone": { + "type": "int", + "allowedValues": [ + 0, 1, 2, 3 ], "metadata": { - "description": "Optional. Zone where the volume will be placed." + "description": "Required. The Availability Zone to place the resource in. If set to 0, then Availability Zone is not set." } }, "serviceLevel": { @@ -1257,9 +1277,19 @@ }, "protocolTypes": { "type": "array", - "defaultValue": [], + "items": { + "type": "string" + }, + "defaultValue": [ + "NFSv3" + ], + "allowedValues": [ + "NFSv3", + "NFSv4.1", + "CIFS" + ], "metadata": { - "description": "Optional. Set of protocol types." + "description": "Optional. Set of protocol types. Default value is `['NFSv3']`. If you are creating a dual-stack volume, set either `['NFSv3','CIFS']` or `['NFSv4.1','CIFS']`." } }, "subnetResourceId": { @@ -1435,7 +1465,7 @@ "name": "[format('{0}/{1}/{2}', parameters('netAppAccountName'), parameters('capacityPoolName'), parameters('name'))]", "location": "[parameters('location')]", "properties": "[shallowMerge(createArray(createObject('coolAccess', parameters('coolAccess'), 'coolAccessRetrievalPolicy', parameters('coolAccessRetrievalPolicy'), 'coolnessPeriod', parameters('coolnessPeriod'), 'encryptionKeySource', parameters('encryptionKeySource')), if(not(equals(parameters('encryptionKeySource'), 'Microsoft.NetApp')), createObject('keyVaultPrivateEndpointResourceId', extensionResourceId(format('/subscriptions/{0}/resourceGroups/{1}', split(coalesce(parameters('keyVaultPrivateEndpointResourceId'), '//'), '/')[2], split(coalesce(parameters('keyVaultPrivateEndpointResourceId'), '////'), '/')[4]), 'Microsoft.Network/privateEndpoints', last(split(coalesce(parameters('keyVaultPrivateEndpointResourceId'), 'dummyVault'), '/')))), createObject()), if(not(empty(parameters('volumeType'))), createObject('volumeType', parameters('volumeType')), createObject()), createObject('dataProtection', if(not(empty(parameters('dataProtection'))), createObject('replication', if(not(empty(tryGet(parameters('dataProtection'), 'replication'))), createObject('endpointType', tryGet(parameters('dataProtection'), 'replication', 'endpointType'), 'remoteVolumeRegion', if(not(empty(tryGet(tryGet(parameters('dataProtection'), 'replication'), 'remoteVolumeResourceId'))), extensionResourceId(format('/subscriptions/{0}/resourceGroups/{1}', split(coalesce(tryGet(tryGet(parameters('dataProtection'), 'replication'), 'remoteVolumeResourceId'), '//'), '/')[2], split(coalesce(tryGet(tryGet(parameters('dataProtection'), 'replication'), 'remoteVolumeResourceId'), '////'), '/')[4]), 'Microsoft.NetApp/netAppAccounts/capacityPools/volumes', split(coalesce(tryGet(tryGet(parameters('dataProtection'), 'replication'), 'remoteVolumeResourceId'), '//'), '/')[8], split(coalesce(tryGet(tryGet(parameters('dataProtection'), 'replication'), 'remoteVolumeResourceId'), '//'), '/')[10], last(split(coalesce(tryGet(tryGet(parameters('dataProtection'), 'replication'), 'remoteVolumeResourceId'), 'dummyvolume'), '/'))), null()), 'remoteVolumeResourceId', tryGet(tryGet(parameters('dataProtection'), 'replication'), 'remoteVolumeResourceId'), 'replicationSchedule', tryGet(parameters('dataProtection'), 'replication', 'replicationSchedule'), 'remotePath', tryGet(tryGet(parameters('dataProtection'), 'replication'), 'remotePath')), createObject()), 'backup', if(not(empty(tryGet(parameters('dataProtection'), 'backup'))), createObject('backupPolicyId', resourceId('Microsoft.NetApp/netAppAccounts/backupPolicies', parameters('netAppAccountName'), tryGet(parameters('dataProtection'), 'backup', 'backupPolicyName')), 'policyEnforced', coalesce(tryGet(parameters('dataProtection'), 'backup', 'policyEnforced'), false()), 'backupVaultId', resourceId('Microsoft.NetApp/netAppAccounts/backupVaults', parameters('netAppAccountName'), tryGet(parameters('dataProtection'), 'backup', 'backupVaultName'))), createObject()), 'snapshot', if(not(empty(tryGet(parameters('dataProtection'), 'snapshot'))), createObject('snapshotPolicyId', resourceId('Microsoft.NetApp/netAppAccounts/snapshotPolicies', parameters('netAppAccountName'), tryGet(parameters('dataProtection'), 'snapshot', 'snapshotPolicyName'))), createObject())), null()), 'networkFeatures', parameters('networkFeatures'), 'serviceLevel', parameters('serviceLevel'), 'creationToken', parameters('creationToken'), 'usageThreshold', parameters('usageThreshold'), 'protocolTypes', parameters('protocolTypes'), 'subnetId', extensionResourceId(format('/subscriptions/{0}/resourceGroups/{1}', split(parameters('subnetResourceId'), '/')[2], split(parameters('subnetResourceId'), '/')[4]), 'Microsoft.Network/virtualNetworks/subnets', split(parameters('subnetResourceId'), '/')[8], last(split(parameters('subnetResourceId'), '/'))), 'exportPolicy', parameters('exportPolicy'), 'smbContinuouslyAvailable', parameters('smbContinuouslyAvailable'), 'smbEncryption', parameters('smbEncryption'), 'smbNonBrowsable', parameters('smbNonBrowsable'), 'kerberosEnabled', parameters('kerberosEnabled'))))]", - "zones": "[map(parameters('zones'), lambda('zone', format('{0}', lambdaVariables('zone'))))]" + "zones": "[if(not(equals(parameters('zone'), 0)), createArray(string(parameters('zone'))), null())]" }, "volume_roleAssignments": { "copy": { diff --git a/avm/res/net-app/net-app-account/capacity-pool/volume/README.md b/avm/res/net-app/net-app-account/capacity-pool/volume/README.md index 26213e73b1..7c5dfd4098 100644 --- a/avm/res/net-app/net-app-account/capacity-pool/volume/README.md +++ b/avm/res/net-app/net-app-account/capacity-pool/volume/README.md @@ -27,6 +27,7 @@ This module deploys an Azure NetApp Files Capacity Pool Volume. | [`name`](#parameter-name) | string | The name of the pool volume. | | [`subnetResourceId`](#parameter-subnetresourceid) | string | The Azure Resource URI for a delegated subnet. Must have the delegation Microsoft.NetApp/volumes. | | [`usageThreshold`](#parameter-usagethreshold) | int | Maximum storage quota allowed for a file system in bytes. | +| [`zone`](#parameter-zone) | int | The Availability Zone to place the resource in. If set to 0, then Availability Zone is not set. | **Conditional parameters** @@ -48,14 +49,13 @@ This module deploys an Azure NetApp Files Capacity Pool Volume. | [`keyVaultPrivateEndpointResourceId`](#parameter-keyvaultprivateendpointresourceid) | string | The resource ID of the key vault private endpoint. | | [`location`](#parameter-location) | string | Location of the pool volume. | | [`networkFeatures`](#parameter-networkfeatures) | string | Network feature for the volume. | -| [`protocolTypes`](#parameter-protocoltypes) | array | Set of protocol types. | +| [`protocolTypes`](#parameter-protocoltypes) | array | Set of protocol types. Default value is `['NFSv3']`. If you are creating a dual-stack volume, set either `['NFSv3','CIFS']` or `['NFSv4.1','CIFS']`. | | [`roleAssignments`](#parameter-roleassignments) | array | Array of role assignments to create. | | [`serviceLevel`](#parameter-servicelevel) | string | The pool service level. Must match the one of the parent capacity pool. | | [`smbContinuouslyAvailable`](#parameter-smbcontinuouslyavailable) | bool | Enables continuously available share property for SMB volume. Only applicable for SMB volume. | | [`smbEncryption`](#parameter-smbencryption) | bool | Enables SMB encryption. Only applicable for SMB/DualProtocol volume. | | [`smbNonBrowsable`](#parameter-smbnonbrowsable) | string | Enables non-browsable property for SMB Shares. Only applicable for SMB/DualProtocol volume. | | [`volumeType`](#parameter-volumetype) | string | The type of the volume. DataProtection volumes are used for replication. | -| [`zones`](#parameter-zones) | array | Zone where the volume will be placed. | ### Parameter: `coolAccess` @@ -92,6 +92,22 @@ Maximum storage quota allowed for a file system in bytes. - Required: Yes - Type: int +### Parameter: `zone` + +The Availability Zone to place the resource in. If set to 0, then Availability Zone is not set. + +- Required: Yes +- Type: int +- Allowed: + ```Bicep + [ + 0 + 1 + 2 + 3 + ] + ``` + ### Parameter: `capacityPoolName` The name of the parent capacity pool. Required if the template is used in a standalone deployment. @@ -499,11 +515,24 @@ Network feature for the volume. ### Parameter: `protocolTypes` -Set of protocol types. +Set of protocol types. Default value is `['NFSv3']`. If you are creating a dual-stack volume, set either `['NFSv3','CIFS']` or `['NFSv4.1','CIFS']`. - Required: No - Type: array -- Default: `[]` +- Default: + ```Bicep + [ + 'NFSv3' + ] + ``` +- Allowed: + ```Bicep + [ + 'CIFS' + 'NFSv3' + 'NFSv4.1' + ] + ``` ### Parameter: `roleAssignments` @@ -663,21 +692,6 @@ The type of the volume. DataProtection volumes are used for replication. - Required: No - Type: string -### Parameter: `zones` - -Zone where the volume will be placed. - -- Required: No -- Type: array -- Default: - ```Bicep - [ - 1 - 2 - 3 - ] - ``` - ## Outputs | Output | Type | Description | diff --git a/avm/res/net-app/net-app-account/capacity-pool/volume/main.bicep b/avm/res/net-app/net-app-account/capacity-pool/volume/main.bicep index f61ed7b976..105f3c28e3 100644 --- a/avm/res/net-app/net-app-account/capacity-pool/volume/main.bicep +++ b/avm/res/net-app/net-app-account/capacity-pool/volume/main.bicep @@ -31,8 +31,14 @@ param keyVaultPrivateEndpointResourceId string? @description('Optional. The type of the volume. DataProtection volumes are used for replication.') param volumeType string? -@description('Optional. Zone where the volume will be placed.') -param zones int[] = [1, 2, 3] +@description('Required. The Availability Zone to place the resource in. If set to 0, then Availability Zone is not set.') +@allowed([ + 0 + 1 + 2 + 3 +]) +param zone int @description('Optional. The pool service level. Must match the one of the parent capacity pool.') @allowed([ @@ -58,8 +64,13 @@ param creationToken string = name @description('Required. Maximum storage quota allowed for a file system in bytes.') param usageThreshold int -@description('Optional. Set of protocol types.') -param protocolTypes array = [] +@description('Optional. Set of protocol types. Default value is `[\'NFSv3\']`. If you are creating a dual-stack volume, set either `[\'NFSv3\',\'CIFS\']` or `[\'NFSv4.1\',\'CIFS\']`.') +@allowed([ + 'NFSv3' + 'NFSv4.1' + 'CIFS' +]) +param protocolTypes string[] = ['NFSv3'] @description('Required. The Azure Resource URI for a delegated subnet. Must have the delegation Microsoft.NetApp/volumes.') param subnetResourceId string @@ -235,7 +246,7 @@ resource volume 'Microsoft.NetApp/netAppAccounts/capacityPools/volumes@2024-07-0 smbNonBrowsable: smbNonBrowsable kerberosEnabled: kerberosEnabled } - zones: map(zones, zone => '${zone}') + zones: zone != 0 ? [string(zone)] : null } resource volume_roleAssignments 'Microsoft.Authorization/roleAssignments@2022-04-01' = [ diff --git a/avm/res/net-app/net-app-account/capacity-pool/volume/main.json b/avm/res/net-app/net-app-account/capacity-pool/volume/main.json index 677c518485..576588dad1 100644 --- a/avm/res/net-app/net-app-account/capacity-pool/volume/main.json +++ b/avm/res/net-app/net-app-account/capacity-pool/volume/main.json @@ -5,8 +5,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.33.13.18514", - "templateHash": "13717060947862126529" + "version": "0.33.93.31351", + "templateHash": "9908729682088720878" }, "name": "Azure NetApp Files Capacity Pool Volumes", "description": "This module deploys an Azure NetApp Files Capacity Pool Volume." @@ -412,18 +412,16 @@ "description": "Optional. The type of the volume. DataProtection volumes are used for replication." } }, - "zones": { - "type": "array", - "items": { - "type": "int" - }, - "defaultValue": [ + "zone": { + "type": "int", + "allowedValues": [ + 0, 1, 2, 3 ], "metadata": { - "description": "Optional. Zone where the volume will be placed." + "description": "Required. The Availability Zone to place the resource in. If set to 0, then Availability Zone is not set." } }, "serviceLevel": { @@ -467,9 +465,19 @@ }, "protocolTypes": { "type": "array", - "defaultValue": [], + "items": { + "type": "string" + }, + "defaultValue": [ + "NFSv3" + ], + "allowedValues": [ + "NFSv3", + "NFSv4.1", + "CIFS" + ], "metadata": { - "description": "Optional. Set of protocol types." + "description": "Optional. Set of protocol types. Default value is `['NFSv3']`. If you are creating a dual-stack volume, set either `['NFSv3','CIFS']` or `['NFSv4.1','CIFS']`." } }, "subnetResourceId": { @@ -645,7 +653,7 @@ "name": "[format('{0}/{1}/{2}', parameters('netAppAccountName'), parameters('capacityPoolName'), parameters('name'))]", "location": "[parameters('location')]", "properties": "[shallowMerge(createArray(createObject('coolAccess', parameters('coolAccess'), 'coolAccessRetrievalPolicy', parameters('coolAccessRetrievalPolicy'), 'coolnessPeriod', parameters('coolnessPeriod'), 'encryptionKeySource', parameters('encryptionKeySource')), if(not(equals(parameters('encryptionKeySource'), 'Microsoft.NetApp')), createObject('keyVaultPrivateEndpointResourceId', extensionResourceId(format('/subscriptions/{0}/resourceGroups/{1}', split(coalesce(parameters('keyVaultPrivateEndpointResourceId'), '//'), '/')[2], split(coalesce(parameters('keyVaultPrivateEndpointResourceId'), '////'), '/')[4]), 'Microsoft.Network/privateEndpoints', last(split(coalesce(parameters('keyVaultPrivateEndpointResourceId'), 'dummyVault'), '/')))), createObject()), if(not(empty(parameters('volumeType'))), createObject('volumeType', parameters('volumeType')), createObject()), createObject('dataProtection', if(not(empty(parameters('dataProtection'))), createObject('replication', if(not(empty(tryGet(parameters('dataProtection'), 'replication'))), createObject('endpointType', tryGet(parameters('dataProtection'), 'replication', 'endpointType'), 'remoteVolumeRegion', if(not(empty(tryGet(tryGet(parameters('dataProtection'), 'replication'), 'remoteVolumeResourceId'))), extensionResourceId(format('/subscriptions/{0}/resourceGroups/{1}', split(coalesce(tryGet(tryGet(parameters('dataProtection'), 'replication'), 'remoteVolumeResourceId'), '//'), '/')[2], split(coalesce(tryGet(tryGet(parameters('dataProtection'), 'replication'), 'remoteVolumeResourceId'), '////'), '/')[4]), 'Microsoft.NetApp/netAppAccounts/capacityPools/volumes', split(coalesce(tryGet(tryGet(parameters('dataProtection'), 'replication'), 'remoteVolumeResourceId'), '//'), '/')[8], split(coalesce(tryGet(tryGet(parameters('dataProtection'), 'replication'), 'remoteVolumeResourceId'), '//'), '/')[10], last(split(coalesce(tryGet(tryGet(parameters('dataProtection'), 'replication'), 'remoteVolumeResourceId'), 'dummyvolume'), '/'))), null()), 'remoteVolumeResourceId', tryGet(tryGet(parameters('dataProtection'), 'replication'), 'remoteVolumeResourceId'), 'replicationSchedule', tryGet(parameters('dataProtection'), 'replication', 'replicationSchedule'), 'remotePath', tryGet(tryGet(parameters('dataProtection'), 'replication'), 'remotePath')), createObject()), 'backup', if(not(empty(tryGet(parameters('dataProtection'), 'backup'))), createObject('backupPolicyId', resourceId('Microsoft.NetApp/netAppAccounts/backupPolicies', parameters('netAppAccountName'), tryGet(parameters('dataProtection'), 'backup', 'backupPolicyName')), 'policyEnforced', coalesce(tryGet(parameters('dataProtection'), 'backup', 'policyEnforced'), false()), 'backupVaultId', resourceId('Microsoft.NetApp/netAppAccounts/backupVaults', parameters('netAppAccountName'), tryGet(parameters('dataProtection'), 'backup', 'backupVaultName'))), createObject()), 'snapshot', if(not(empty(tryGet(parameters('dataProtection'), 'snapshot'))), createObject('snapshotPolicyId', resourceId('Microsoft.NetApp/netAppAccounts/snapshotPolicies', parameters('netAppAccountName'), tryGet(parameters('dataProtection'), 'snapshot', 'snapshotPolicyName'))), createObject())), null()), 'networkFeatures', parameters('networkFeatures'), 'serviceLevel', parameters('serviceLevel'), 'creationToken', parameters('creationToken'), 'usageThreshold', parameters('usageThreshold'), 'protocolTypes', parameters('protocolTypes'), 'subnetId', extensionResourceId(format('/subscriptions/{0}/resourceGroups/{1}', split(parameters('subnetResourceId'), '/')[2], split(parameters('subnetResourceId'), '/')[4]), 'Microsoft.Network/virtualNetworks/subnets', split(parameters('subnetResourceId'), '/')[8], last(split(parameters('subnetResourceId'), '/'))), 'exportPolicy', parameters('exportPolicy'), 'smbContinuouslyAvailable', parameters('smbContinuouslyAvailable'), 'smbEncryption', parameters('smbEncryption'), 'smbNonBrowsable', parameters('smbNonBrowsable'), 'kerberosEnabled', parameters('kerberosEnabled'))))]", - "zones": "[map(parameters('zones'), lambda('zone', format('{0}', lambdaVariables('zone'))))]" + "zones": "[if(not(equals(parameters('zone'), 0)), createArray(string(parameters('zone'))), null())]" }, "volume_roleAssignments": { "copy": { diff --git a/avm/res/net-app/net-app-account/main.bicep b/avm/res/net-app/net-app-account/main.bicep index 0830edb906..310880a68c 100644 --- a/avm/res/net-app/net-app-account/main.bicep +++ b/avm/res/net-app/net-app-account/main.bicep @@ -362,7 +362,9 @@ type capacityPoolType = { @description('Optional. The pool service level.') serviceLevel: ('Premium' | 'Standard' | 'StandardZRS' | 'Ultra')? - @description('Required. Provisioned size of the pool (in bytes). Allowed values are in 4TiB chunks (value must be multiply of 4398046511104).') + @description('Required. Provisioned size of the pool in Tebibytes (TiB).') + @minValue(1) + @maxValue(2048) size: int @description('Optional. The qos type of the pool.') diff --git a/avm/res/net-app/net-app-account/main.json b/avm/res/net-app/net-app-account/main.json index 68b9f712e5..1bd7f52926 100644 --- a/avm/res/net-app/net-app-account/main.json +++ b/avm/res/net-app/net-app-account/main.json @@ -5,8 +5,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.33.13.18514", - "templateHash": "3612442392718175721" + "version": "0.33.93.31351", + "templateHash": "17807010386700434469" }, "name": "Azure NetApp Files", "description": "This module deploys an Azure NetApp File." @@ -83,8 +83,10 @@ }, "size": { "type": "int", + "minValue": 1, + "maxValue": 2048, "metadata": { - "description": "Required. Provisioned size of the pool (in bytes). Allowed values are in 4TiB chunks (value must be multiply of 4398046511104)." + "description": "Required. Provisioned size of the pool in Tebibytes (TiB)." } }, "qosType": { @@ -905,14 +907,10 @@ "description": "Optional. Location of the pool volume." } }, - "zones": { - "type": "array", - "items": { - "type": "int" - }, - "nullable": true, + "zone": { + "type": "int", "metadata": { - "description": "Optional. Zone where the volume will be placed." + "description": "Required. The Availability Zone to place the resource in. If set to 0, then Availability Zone is not set." } }, "serviceLevel": { @@ -956,12 +954,14 @@ }, "protocolTypes": { "type": "array", - "items": { - "type": "string" - }, + "allowedValues": [ + "CIFS", + "NFSv3", + "NFSv4.1" + ], "nullable": true, "metadata": { - "description": "Optional. Set of protocol types." + "description": "Optional. Set of protocol types. Default value is `['NFSv3']`. If you are creating a dual-stack volume, set either `['NFSv3','CIFS']` or `['NFSv4.1','CIFS']`." } }, "subnetResourceId": { @@ -1456,8 +1456,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.33.13.18514", - "templateHash": "7141176618644423280" + "version": "0.33.93.31351", + "templateHash": "2748634922557584170" }, "name": "Azure NetApp Files Backup Policy", "description": "This module deploys a Backup Policy for Azure NetApp File." @@ -1603,8 +1603,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.33.13.18514", - "templateHash": "7486219490853787459" + "version": "0.33.93.31351", + "templateHash": "7661114070380487495" }, "name": "Azure NetApp Files Snapshot Policy", "description": "This module deploys a Snapshot Policy for an Azure NetApp File." @@ -1919,8 +1919,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.33.13.18514", - "templateHash": "9738469557677047438" + "version": "0.33.93.31351", + "templateHash": "6704781490326075849" }, "name": "Azure NetApp Files Volume Backup Vault", "description": "This module deploys a NetApp Files Backup Vault." @@ -2058,8 +2058,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.33.13.18514", - "templateHash": "3948084235912412629" + "version": "0.33.93.31351", + "templateHash": "17452697444375969559" }, "name": "Azure NetApp Files Volume Backup", "description": "This module deploys a backup of a NetApp Files Volume." @@ -2268,8 +2268,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.33.13.18514", - "templateHash": "9255104616647372037" + "version": "0.33.93.31351", + "templateHash": "567288787230162458" }, "name": "Azure NetApp Files Capacity Pools", "description": "This module deploys an Azure NetApp Files Capacity Pool." @@ -2333,14 +2333,10 @@ "description": "Optional. Location of the pool volume." } }, - "zones": { - "type": "array", - "items": { - "type": "int" - }, - "nullable": true, + "zone": { + "type": "int", "metadata": { - "description": "Optional. Zone where the volume will be placed." + "description": "Required. The Availability Zone to place the resource in. If set to 0, then Availability Zone is not set." } }, "serviceLevel": { @@ -2384,12 +2380,14 @@ }, "protocolTypes": { "type": "array", - "items": { - "type": "string" - }, + "allowedValues": [ + "CIFS", + "NFSv3", + "NFSv4.1" + ], "nullable": true, "metadata": { - "description": "Optional. Set of protocol types." + "description": "Optional. Set of protocol types. Default value is `['NFSv3']`. If you are creating a dual-stack volume, set either `['NFSv3','CIFS']` or `['NFSv4.1','CIFS']`." } }, "subnetResourceId": { @@ -2807,6 +2805,28 @@ } } }, + "functions": [ + { + "namespace": "__bicep", + "members": { + "tebibytesToBytes": { + "parameters": [ + { + "type": "int", + "name": "tebibytes" + } + ], + "output": { + "type": "int", + "value": "[mul(mul(mul(mul(parameters('tebibytes'), 1024), 1024), 1024), 1024)]" + }, + "metadata": { + "description": "Converts from tebibytes to bytes." + } + } + } + } + ], "parameters": { "netAppAccountName": { "type": "string", @@ -2849,8 +2869,10 @@ }, "size": { "type": "int", + "minValue": 1, + "maxValue": 2048, "metadata": { - "description": "Required. Provisioned size of the pool (in bytes). Allowed values are in 4TiB chunks (value must be multiply of 4398046511104)." + "description": "Required. Provisioned size of the pool in Tebibytes (TiB)." } }, "qosType": { @@ -2934,7 +2956,7 @@ "tags": "[parameters('tags')]", "properties": { "serviceLevel": "[parameters('serviceLevel')]", - "size": "[parameters('size')]", + "size": "[__bicep.tebibytesToBytes(parameters('size'))]", "qosType": "[parameters('qosType')]", "coolAccess": "[parameters('coolAccess')]", "encryptionType": "[parameters('encryptionType')]" @@ -3000,7 +3022,7 @@ "value": "[coalesce(parameters('volumes'), createArray())[copyIndex()].usageThreshold]" }, "protocolTypes": { - "value": "[tryGet(coalesce(parameters('volumes'), createArray())[copyIndex()], 'protocolTypes')]" + "value": "[coalesce(parameters('volumes'), createArray())[copyIndex()].protocolTypes]" }, "subnetResourceId": { "value": "[coalesce(parameters('volumes'), createArray())[copyIndex()].subnetResourceId]" @@ -3014,8 +3036,8 @@ "networkFeatures": { "value": "[tryGet(coalesce(parameters('volumes'), createArray())[copyIndex()], 'networkFeatures')]" }, - "zones": { - "value": "[tryGet(coalesce(parameters('volumes'), createArray())[copyIndex()], 'zones')]" + "zone": { + "value": "[tryGet(coalesce(parameters('volumes'), createArray())[copyIndex()], 'availabilityZone')]" }, "coolAccess": { "value": "[coalesce(tryGet(coalesce(parameters('volumes'), createArray())[copyIndex()], 'coolAccess'), false())]" @@ -3058,8 +3080,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.33.13.18514", - "templateHash": "13717060947862126529" + "version": "0.33.93.31351", + "templateHash": "9908729682088720878" }, "name": "Azure NetApp Files Capacity Pool Volumes", "description": "This module deploys an Azure NetApp Files Capacity Pool Volume." @@ -3465,18 +3487,16 @@ "description": "Optional. The type of the volume. DataProtection volumes are used for replication." } }, - "zones": { - "type": "array", - "items": { - "type": "int" - }, - "defaultValue": [ + "zone": { + "type": "int", + "allowedValues": [ + 0, 1, 2, 3 ], "metadata": { - "description": "Optional. Zone where the volume will be placed." + "description": "Required. The Availability Zone to place the resource in. If set to 0, then Availability Zone is not set." } }, "serviceLevel": { @@ -3520,9 +3540,19 @@ }, "protocolTypes": { "type": "array", - "defaultValue": [], + "items": { + "type": "string" + }, + "defaultValue": [ + "NFSv3" + ], + "allowedValues": [ + "NFSv3", + "NFSv4.1", + "CIFS" + ], "metadata": { - "description": "Optional. Set of protocol types." + "description": "Optional. Set of protocol types. Default value is `['NFSv3']`. If you are creating a dual-stack volume, set either `['NFSv3','CIFS']` or `['NFSv4.1','CIFS']`." } }, "subnetResourceId": { @@ -3698,7 +3728,7 @@ "name": "[format('{0}/{1}/{2}', parameters('netAppAccountName'), parameters('capacityPoolName'), parameters('name'))]", "location": "[parameters('location')]", "properties": "[shallowMerge(createArray(createObject('coolAccess', parameters('coolAccess'), 'coolAccessRetrievalPolicy', parameters('coolAccessRetrievalPolicy'), 'coolnessPeriod', parameters('coolnessPeriod'), 'encryptionKeySource', parameters('encryptionKeySource')), if(not(equals(parameters('encryptionKeySource'), 'Microsoft.NetApp')), createObject('keyVaultPrivateEndpointResourceId', extensionResourceId(format('/subscriptions/{0}/resourceGroups/{1}', split(coalesce(parameters('keyVaultPrivateEndpointResourceId'), '//'), '/')[2], split(coalesce(parameters('keyVaultPrivateEndpointResourceId'), '////'), '/')[4]), 'Microsoft.Network/privateEndpoints', last(split(coalesce(parameters('keyVaultPrivateEndpointResourceId'), 'dummyVault'), '/')))), createObject()), if(not(empty(parameters('volumeType'))), createObject('volumeType', parameters('volumeType')), createObject()), createObject('dataProtection', if(not(empty(parameters('dataProtection'))), createObject('replication', if(not(empty(tryGet(parameters('dataProtection'), 'replication'))), createObject('endpointType', tryGet(parameters('dataProtection'), 'replication', 'endpointType'), 'remoteVolumeRegion', if(not(empty(tryGet(tryGet(parameters('dataProtection'), 'replication'), 'remoteVolumeResourceId'))), extensionResourceId(format('/subscriptions/{0}/resourceGroups/{1}', split(coalesce(tryGet(tryGet(parameters('dataProtection'), 'replication'), 'remoteVolumeResourceId'), '//'), '/')[2], split(coalesce(tryGet(tryGet(parameters('dataProtection'), 'replication'), 'remoteVolumeResourceId'), '////'), '/')[4]), 'Microsoft.NetApp/netAppAccounts/capacityPools/volumes', split(coalesce(tryGet(tryGet(parameters('dataProtection'), 'replication'), 'remoteVolumeResourceId'), '//'), '/')[8], split(coalesce(tryGet(tryGet(parameters('dataProtection'), 'replication'), 'remoteVolumeResourceId'), '//'), '/')[10], last(split(coalesce(tryGet(tryGet(parameters('dataProtection'), 'replication'), 'remoteVolumeResourceId'), 'dummyvolume'), '/'))), null()), 'remoteVolumeResourceId', tryGet(tryGet(parameters('dataProtection'), 'replication'), 'remoteVolumeResourceId'), 'replicationSchedule', tryGet(parameters('dataProtection'), 'replication', 'replicationSchedule'), 'remotePath', tryGet(tryGet(parameters('dataProtection'), 'replication'), 'remotePath')), createObject()), 'backup', if(not(empty(tryGet(parameters('dataProtection'), 'backup'))), createObject('backupPolicyId', resourceId('Microsoft.NetApp/netAppAccounts/backupPolicies', parameters('netAppAccountName'), tryGet(parameters('dataProtection'), 'backup', 'backupPolicyName')), 'policyEnforced', coalesce(tryGet(parameters('dataProtection'), 'backup', 'policyEnforced'), false()), 'backupVaultId', resourceId('Microsoft.NetApp/netAppAccounts/backupVaults', parameters('netAppAccountName'), tryGet(parameters('dataProtection'), 'backup', 'backupVaultName'))), createObject()), 'snapshot', if(not(empty(tryGet(parameters('dataProtection'), 'snapshot'))), createObject('snapshotPolicyId', resourceId('Microsoft.NetApp/netAppAccounts/snapshotPolicies', parameters('netAppAccountName'), tryGet(parameters('dataProtection'), 'snapshot', 'snapshotPolicyName'))), createObject())), null()), 'networkFeatures', parameters('networkFeatures'), 'serviceLevel', parameters('serviceLevel'), 'creationToken', parameters('creationToken'), 'usageThreshold', parameters('usageThreshold'), 'protocolTypes', parameters('protocolTypes'), 'subnetId', extensionResourceId(format('/subscriptions/{0}/resourceGroups/{1}', split(parameters('subnetResourceId'), '/')[2], split(parameters('subnetResourceId'), '/')[4]), 'Microsoft.Network/virtualNetworks/subnets', split(parameters('subnetResourceId'), '/')[8], last(split(parameters('subnetResourceId'), '/'))), 'exportPolicy', parameters('exportPolicy'), 'smbContinuouslyAvailable', parameters('smbContinuouslyAvailable'), 'smbEncryption', parameters('smbEncryption'), 'smbNonBrowsable', parameters('smbNonBrowsable'), 'kerberosEnabled', parameters('kerberosEnabled'))))]", - "zones": "[map(parameters('zones'), lambda('zone', format('{0}', lambdaVariables('zone'))))]" + "zones": "[if(not(equals(parameters('zone'), 0)), createArray(string(parameters('zone'))), null())]" }, "volume_roleAssignments": { "copy": { @@ -3843,8 +3873,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.33.13.18514", - "templateHash": "9738469557677047438" + "version": "0.33.93.31351", + "templateHash": "6704781490326075849" }, "name": "Azure NetApp Files Volume Backup Vault", "description": "This module deploys a NetApp Files Backup Vault." @@ -3982,8 +4012,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.33.13.18514", - "templateHash": "3948084235912412629" + "version": "0.33.93.31351", + "templateHash": "17452697444375969559" }, "name": "Azure NetApp Files Volume Backup", "description": "This module deploys a backup of a NetApp Files Volume." diff --git a/avm/res/net-app/net-app-account/snapshot-policies/main.json b/avm/res/net-app/net-app-account/snapshot-policies/main.json index 114e983832..c2363b6eec 100644 --- a/avm/res/net-app/net-app-account/snapshot-policies/main.json +++ b/avm/res/net-app/net-app-account/snapshot-policies/main.json @@ -5,8 +5,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.33.13.18514", - "templateHash": "7486219490853787459" + "version": "0.33.93.31351", + "templateHash": "7661114070380487495" }, "name": "Azure NetApp Files Snapshot Policy", "description": "This module deploys a Snapshot Policy for an Azure NetApp File." diff --git a/avm/res/net-app/net-app-account/tests/e2e/max/main.test.bicep b/avm/res/net-app/net-app-account/tests/e2e/max/main.test.bicep index 920d492c07..153a13c3e8 100644 --- a/avm/res/net-app/net-app-account/tests/e2e/max/main.test.bicep +++ b/avm/res/net-app/net-app-account/tests/e2e/max/main.test.bicep @@ -81,7 +81,7 @@ module testDeployment '../../../main.bicep' = { } ] serviceLevel: 'Premium' - size: 4398046511104 + size: 1 volumes: [ { name: 'vol-001' @@ -113,7 +113,7 @@ module testDeployment '../../../main.bicep' = { } ] } - zones: [1] + zone: 1 networkFeatures: 'Standard' encryptionKeySource: encryptionKeySource protocolTypes: [ @@ -150,7 +150,7 @@ module testDeployment '../../../main.bicep' = { ] } name: 'vol-002' - zones: [1] + zone: 1 networkFeatures: 'Standard' encryptionKeySource: encryptionKeySource protocolTypes: [ @@ -174,7 +174,7 @@ module testDeployment '../../../main.bicep' = { } ] serviceLevel: 'Premium' - size: 4398046511104 + size: 1 volumes: [] } ] diff --git a/avm/res/net-app/net-app-account/tests/e2e/nfs3/main.test.bicep b/avm/res/net-app/net-app-account/tests/e2e/nfs3/main.test.bicep index 8e366f3faf..f00c348c8e 100644 --- a/avm/res/net-app/net-app-account/tests/e2e/nfs3/main.test.bicep +++ b/avm/res/net-app/net-app-account/tests/e2e/nfs3/main.test.bicep @@ -66,7 +66,7 @@ module testDeployment '../../../main.bicep' = { } ] serviceLevel: 'Premium' - size: 4398046511104 + size: 1 volumes: [ { exportPolicy: { @@ -88,7 +88,7 @@ module testDeployment '../../../main.bicep' = { ] } name: '${namePrefix}-${serviceShort}-vol-001' - zones: [1] + zone: 1 networkFeatures: 'Standard' encryptionKeySource: encryptionKeySource protocolTypes: [ @@ -106,7 +106,7 @@ module testDeployment '../../../main.bicep' = { } { name: '${namePrefix}-${serviceShort}-vol-002' - zones: [1] + zone: 1 networkFeatures: 'Standard' encryptionKeySource: encryptionKeySource protocolTypes: [ @@ -127,7 +127,7 @@ module testDeployment '../../../main.bicep' = { } ] serviceLevel: 'Premium' - size: 4398046511104 + size: 1 volumes: [] } ] diff --git a/avm/res/net-app/net-app-account/version.json b/avm/res/net-app/net-app-account/version.json index 35040975ae..0f81d22abc 100644 --- a/avm/res/net-app/net-app-account/version.json +++ b/avm/res/net-app/net-app-account/version.json @@ -1,7 +1,7 @@ { "$schema": "https://aka.ms/bicep-registry-module-version-file-schema#", - "version": "0.7", + "version": "0.8", "pathFilters": [ "./main.json" ] -} +} \ No newline at end of file