All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.pulumi.azure.netapp.kotlin.VolumeArgs.kt Maven / Gradle / Ivy

@file:Suppress("NAME_SHADOWING", "DEPRECATION")

package com.pulumi.azure.netapp.kotlin

import com.pulumi.azure.netapp.VolumeArgs.builder
import com.pulumi.azure.netapp.kotlin.inputs.VolumeDataProtectionReplicationArgs
import com.pulumi.azure.netapp.kotlin.inputs.VolumeDataProtectionReplicationArgsBuilder
import com.pulumi.azure.netapp.kotlin.inputs.VolumeDataProtectionSnapshotPolicyArgs
import com.pulumi.azure.netapp.kotlin.inputs.VolumeDataProtectionSnapshotPolicyArgsBuilder
import com.pulumi.azure.netapp.kotlin.inputs.VolumeExportPolicyRuleArgs
import com.pulumi.azure.netapp.kotlin.inputs.VolumeExportPolicyRuleArgsBuilder
import com.pulumi.core.Output
import com.pulumi.core.Output.of
import com.pulumi.kotlin.ConvertibleToJava
import com.pulumi.kotlin.PulumiTagMarker
import com.pulumi.kotlin.applySuspend
import kotlin.Boolean
import kotlin.Double
import kotlin.Int
import kotlin.Pair
import kotlin.String
import kotlin.Suppress
import kotlin.Unit
import kotlin.collections.List
import kotlin.collections.Map
import kotlin.jvm.JvmName

/**
 *
 * ## Import
 * NetApp Volumes can be imported using the `resource id`, e.g.
 * ```sh
 * $ pulumi import azure:netapp/volume:Volume example /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/group1/providers/Microsoft.NetApp/netAppAccounts/account1/capacityPools/pool1/volumes/volume1
 * ```
 * @property accountName The name of the NetApp account in which the NetApp Pool should be created. Changing this forces a new resource to be created.
 * @property azureVmwareDataStoreEnabled Is the NetApp Volume enabled for Azure VMware Solution (AVS) datastore purpose. Defaults to `false`. Changing this forces a new resource to be created.
 * @property createFromSnapshotResourceId Creates volume from snapshot. Following properties must be the same as the original volume where the snapshot was taken from: `protocols`, `subnet_id`, `location`, `service_level`, `resource_group_name`, `account_name` and `pool_name`. Changing this forces a new resource to be created.
 * @property dataProtectionReplication A `data_protection_replication` block as defined below. Changing this forces a new resource to be created.
 * @property dataProtectionSnapshotPolicy A `data_protection_snapshot_policy` block as defined below.
 * @property encryptionKeySource The encryption key source, it can be `Microsoft.NetApp` for platform managed keys or `Microsoft.KeyVault` for customer-managed keys. This is required with `key_vault_private_endpoint_id`. Changing this forces a new resource to be created.
 * @property exportPolicyRules One or more `export_policy_rule` block defined below.
 * @property kerberosEnabled Enable to allow Kerberos secured volumes. Requires appropriate export rules as well as the parent `azure.netapp.Account`
 * having a defined AD connection.
 * @property keyVaultPrivateEndpointId The Private Endpoint ID for Key Vault, which is required when using customer-managed keys. This is required with `encryption_key_source`. Changing this forces a new resource to be created.
 * @property location Specifies the supported Azure location where the resource exists. Changing this forces a new resource to be created.
 * @property name The name of the NetApp Volume. Changing this forces a new resource to be created.
 * @property networkFeatures Indicates which network feature to use, accepted values are `Basic` or `Standard`, it defaults to `Basic` if not defined. This is a feature in public preview and for more information about it and how to register, please refer to [Configure network features for an Azure NetApp Files volume](https://docs.microsoft.com/en-us/azure/azure-netapp-files/configure-network-features).
 * @property poolName The name of the NetApp pool in which the NetApp Volume should be created. Changing this forces a new resource to be created.
 * @property protocols The target volume protocol expressed as a list. Supported single value include `CIFS`, `NFSv3`, or `NFSv4.1`. If argument is not defined it will default to `NFSv3`. Changing this forces a new resource to be created and data will be lost. Dual protocol scenario is supported for CIFS and NFSv3, for more information, please refer to [Create a dual-protocol volume for Azure NetApp Files](https://docs.microsoft.com/azure/azure-netapp-files/create-volumes-dual-protocol) document.
 * @property resourceGroupName The name of the resource group where the NetApp Volume should be created. Changing this forces a new resource to be created.
 * @property securityStyle Volume security style, accepted values are `unix` or `ntfs`. If not provided, single-protocol volume is created defaulting to `unix` if it is `NFSv3` or `NFSv4.1` volume, if `CIFS`, it will default to `ntfs`. In a dual-protocol volume, if not provided, its value will be `ntfs`. Changing this forces a new resource to be created.
 * @property serviceLevel The target performance of the file system. Valid values include `Premium`, `Standard`, or `Ultra`. Changing this forces a new resource to be created.
 * @property smbAccessBasedEnumerationEnabled Limits enumeration of files and folders (that is, listing the contents) in SMB only to users with allowed access on the share. For instance, if a user doesn't have access to read a file or folder in a share with access-based enumeration enabled, then the file or folder doesn't show up in directory listings. Defaults to `false`. For more information, please refer to [Understand NAS share permissions in Azure NetApp Files](https://learn.microsoft.com/en-us/azure/azure-netapp-files/network-attached-storage-permissions#:~:text=security%20for%20administrators.-,Access%2Dbased%20enumeration,in%20an%20Azure%20NetApp%20Files%20SMB%20volume.%20Only%20contosoadmin%20has%20access.,-In%20the%20below)
 * @property smbContinuousAvailabilityEnabled Enable SMB Continuous Availability.
 * @property smbNonBrowsableEnabled Limits clients from browsing for an SMB share by hiding the share from view in Windows Explorer or when listing shares in "net view." Only end users that know the absolute paths to the share are able to find the share. Defaults to `false`. For more information, please refer to [Understand NAS share permissions in Azure NetApp Files](https://learn.microsoft.com/en-us/azure/azure-netapp-files/network-attached-storage-permissions#:~:text=Non%2Dbrowsable%20shares,find%20the%20share.)
 * @property snapshotDirectoryVisible Specifies whether the .snapshot (NFS clients) or ~snapshot (SMB clients) path of a volume is visible, default value is true.
 * @property storageQuotaInGb The maximum Storage Quota allowed for a file system in Gigabytes.
 * @property subnetId The ID of the Subnet the NetApp Volume resides in, which must have the `Microsoft.NetApp/volumes` delegation. Changing this forces a new resource to be created.
 * @property tags A mapping of tags to assign to the resource.
 * > **Note:** It is highly recommended to use the **lifecycle** property as noted in the example since it will prevent an accidental deletion of the volume if the `protocols` argument changes to a different protocol type.
 * @property throughputInMibps Throughput of this volume in Mibps.
 * @property volumePath A unique file path for the volume. Used when creating mount targets. Changing this forces a new resource to be created.
 * @property zone Specifies the Availability Zone in which the Volume should be located. Possible values are `1`, `2` and `3`. Changing this forces a new resource to be created. This feature is currently in preview, for more information on how to enable it, please refer to [Manage availability zone volume placement for Azure NetApp Files](https://learn.microsoft.com/en-us/azure/azure-netapp-files/manage-availability-zone-volume-placement#register-the-feature).
 */
public data class VolumeArgs(
    public val accountName: Output? = null,
    public val azureVmwareDataStoreEnabled: Output? = null,
    public val createFromSnapshotResourceId: Output? = null,
    public val dataProtectionReplication: Output? = null,
    public val dataProtectionSnapshotPolicy: Output? = null,
    public val encryptionKeySource: Output? = null,
    public val exportPolicyRules: Output>? = null,
    public val kerberosEnabled: Output? = null,
    public val keyVaultPrivateEndpointId: Output? = null,
    public val location: Output? = null,
    public val name: Output? = null,
    public val networkFeatures: Output? = null,
    public val poolName: Output? = null,
    public val protocols: Output>? = null,
    public val resourceGroupName: Output? = null,
    public val securityStyle: Output? = null,
    public val serviceLevel: Output? = null,
    public val smbAccessBasedEnumerationEnabled: Output? = null,
    public val smbContinuousAvailabilityEnabled: Output? = null,
    public val smbNonBrowsableEnabled: Output? = null,
    public val snapshotDirectoryVisible: Output? = null,
    public val storageQuotaInGb: Output? = null,
    public val subnetId: Output? = null,
    public val tags: Output>? = null,
    public val throughputInMibps: Output? = null,
    public val volumePath: Output? = null,
    public val zone: Output? = null,
) : ConvertibleToJava {
    override fun toJava(): com.pulumi.azure.netapp.VolumeArgs =
        com.pulumi.azure.netapp.VolumeArgs.builder()
            .accountName(accountName?.applyValue({ args0 -> args0 }))
            .azureVmwareDataStoreEnabled(azureVmwareDataStoreEnabled?.applyValue({ args0 -> args0 }))
            .createFromSnapshotResourceId(createFromSnapshotResourceId?.applyValue({ args0 -> args0 }))
            .dataProtectionReplication(
                dataProtectionReplication?.applyValue({ args0 ->
                    args0.let({ args0 ->
                        args0.toJava()
                    })
                }),
            )
            .dataProtectionSnapshotPolicy(
                dataProtectionSnapshotPolicy?.applyValue({ args0 ->
                    args0.let({ args0 -> args0.toJava() })
                }),
            )
            .encryptionKeySource(encryptionKeySource?.applyValue({ args0 -> args0 }))
            .exportPolicyRules(
                exportPolicyRules?.applyValue({ args0 ->
                    args0.map({ args0 ->
                        args0.let({ args0 ->
                            args0.toJava()
                        })
                    })
                }),
            )
            .kerberosEnabled(kerberosEnabled?.applyValue({ args0 -> args0 }))
            .keyVaultPrivateEndpointId(keyVaultPrivateEndpointId?.applyValue({ args0 -> args0 }))
            .location(location?.applyValue({ args0 -> args0 }))
            .name(name?.applyValue({ args0 -> args0 }))
            .networkFeatures(networkFeatures?.applyValue({ args0 -> args0 }))
            .poolName(poolName?.applyValue({ args0 -> args0 }))
            .protocols(protocols?.applyValue({ args0 -> args0.map({ args0 -> args0 }) }))
            .resourceGroupName(resourceGroupName?.applyValue({ args0 -> args0 }))
            .securityStyle(securityStyle?.applyValue({ args0 -> args0 }))
            .serviceLevel(serviceLevel?.applyValue({ args0 -> args0 }))
            .smbAccessBasedEnumerationEnabled(smbAccessBasedEnumerationEnabled?.applyValue({ args0 -> args0 }))
            .smbContinuousAvailabilityEnabled(smbContinuousAvailabilityEnabled?.applyValue({ args0 -> args0 }))
            .smbNonBrowsableEnabled(smbNonBrowsableEnabled?.applyValue({ args0 -> args0 }))
            .snapshotDirectoryVisible(snapshotDirectoryVisible?.applyValue({ args0 -> args0 }))
            .storageQuotaInGb(storageQuotaInGb?.applyValue({ args0 -> args0 }))
            .subnetId(subnetId?.applyValue({ args0 -> args0 }))
            .tags(tags?.applyValue({ args0 -> args0.map({ args0 -> args0.key.to(args0.value) }).toMap() }))
            .throughputInMibps(throughputInMibps?.applyValue({ args0 -> args0 }))
            .volumePath(volumePath?.applyValue({ args0 -> args0 }))
            .zone(zone?.applyValue({ args0 -> args0 })).build()
}

/**
 * Builder for [VolumeArgs].
 */
@PulumiTagMarker
public class VolumeArgsBuilder internal constructor() {
    private var accountName: Output? = null

    private var azureVmwareDataStoreEnabled: Output? = null

    private var createFromSnapshotResourceId: Output? = null

    private var dataProtectionReplication: Output? = null

    private var dataProtectionSnapshotPolicy: Output? = null

    private var encryptionKeySource: Output? = null

    private var exportPolicyRules: Output>? = null

    private var kerberosEnabled: Output? = null

    private var keyVaultPrivateEndpointId: Output? = null

    private var location: Output? = null

    private var name: Output? = null

    private var networkFeatures: Output? = null

    private var poolName: Output? = null

    private var protocols: Output>? = null

    private var resourceGroupName: Output? = null

    private var securityStyle: Output? = null

    private var serviceLevel: Output? = null

    private var smbAccessBasedEnumerationEnabled: Output? = null

    private var smbContinuousAvailabilityEnabled: Output? = null

    private var smbNonBrowsableEnabled: Output? = null

    private var snapshotDirectoryVisible: Output? = null

    private var storageQuotaInGb: Output? = null

    private var subnetId: Output? = null

    private var tags: Output>? = null

    private var throughputInMibps: Output? = null

    private var volumePath: Output? = null

    private var zone: Output? = null

    /**
     * @param value The name of the NetApp account in which the NetApp Pool should be created. Changing this forces a new resource to be created.
     */
    @JvmName("syhmrpberuqhripk")
    public suspend fun accountName(`value`: Output) {
        this.accountName = value
    }

    /**
     * @param value Is the NetApp Volume enabled for Azure VMware Solution (AVS) datastore purpose. Defaults to `false`. Changing this forces a new resource to be created.
     */
    @JvmName("ffkcvhlbyavsgsjh")
    public suspend fun azureVmwareDataStoreEnabled(`value`: Output) {
        this.azureVmwareDataStoreEnabled = value
    }

    /**
     * @param value Creates volume from snapshot. Following properties must be the same as the original volume where the snapshot was taken from: `protocols`, `subnet_id`, `location`, `service_level`, `resource_group_name`, `account_name` and `pool_name`. Changing this forces a new resource to be created.
     */
    @JvmName("mjewknqbspmiwwpe")
    public suspend fun createFromSnapshotResourceId(`value`: Output) {
        this.createFromSnapshotResourceId = value
    }

    /**
     * @param value A `data_protection_replication` block as defined below. Changing this forces a new resource to be created.
     */
    @JvmName("yselcwhcybyetrny")
    public suspend
    fun dataProtectionReplication(`value`: Output) {
        this.dataProtectionReplication = value
    }

    /**
     * @param value A `data_protection_snapshot_policy` block as defined below.
     */
    @JvmName("oewoikofbegmdugn")
    public suspend
    fun dataProtectionSnapshotPolicy(`value`: Output) {
        this.dataProtectionSnapshotPolicy = value
    }

    /**
     * @param value The encryption key source, it can be `Microsoft.NetApp` for platform managed keys or `Microsoft.KeyVault` for customer-managed keys. This is required with `key_vault_private_endpoint_id`. Changing this forces a new resource to be created.
     */
    @JvmName("eqxvotgkomqltrer")
    public suspend fun encryptionKeySource(`value`: Output) {
        this.encryptionKeySource = value
    }

    /**
     * @param value One or more `export_policy_rule` block defined below.
     */
    @JvmName("npyrdmtwkrvkqyup")
    public suspend fun exportPolicyRules(`value`: Output>) {
        this.exportPolicyRules = value
    }

    @JvmName("atlwnsabhuecgfim")
    public suspend fun exportPolicyRules(vararg values: Output) {
        this.exportPolicyRules = Output.all(values.asList())
    }

    /**
     * @param values One or more `export_policy_rule` block defined below.
     */
    @JvmName("judqdlssspqpoxuk")
    public suspend fun exportPolicyRules(values: List>) {
        this.exportPolicyRules = Output.all(values)
    }

    /**
     * @param value Enable to allow Kerberos secured volumes. Requires appropriate export rules as well as the parent `azure.netapp.Account`
     * having a defined AD connection.
     */
    @JvmName("infqhdgpgdejwsea")
    public suspend fun kerberosEnabled(`value`: Output) {
        this.kerberosEnabled = value
    }

    /**
     * @param value The Private Endpoint ID for Key Vault, which is required when using customer-managed keys. This is required with `encryption_key_source`. Changing this forces a new resource to be created.
     */
    @JvmName("gxyfaxkmunxnfnws")
    public suspend fun keyVaultPrivateEndpointId(`value`: Output) {
        this.keyVaultPrivateEndpointId = value
    }

    /**
     * @param value Specifies the supported Azure location where the resource exists. Changing this forces a new resource to be created.
     */
    @JvmName("jfndeqypnktayhlb")
    public suspend fun location(`value`: Output) {
        this.location = value
    }

    /**
     * @param value The name of the NetApp Volume. Changing this forces a new resource to be created.
     */
    @JvmName("rxcqsntdcsllfvyd")
    public suspend fun name(`value`: Output) {
        this.name = value
    }

    /**
     * @param value Indicates which network feature to use, accepted values are `Basic` or `Standard`, it defaults to `Basic` if not defined. This is a feature in public preview and for more information about it and how to register, please refer to [Configure network features for an Azure NetApp Files volume](https://docs.microsoft.com/en-us/azure/azure-netapp-files/configure-network-features).
     */
    @JvmName("djjqhrtgkvswlamc")
    public suspend fun networkFeatures(`value`: Output) {
        this.networkFeatures = value
    }

    /**
     * @param value The name of the NetApp pool in which the NetApp Volume should be created. Changing this forces a new resource to be created.
     */
    @JvmName("ohiwpyotrgjkoayv")
    public suspend fun poolName(`value`: Output) {
        this.poolName = value
    }

    /**
     * @param value The target volume protocol expressed as a list. Supported single value include `CIFS`, `NFSv3`, or `NFSv4.1`. If argument is not defined it will default to `NFSv3`. Changing this forces a new resource to be created and data will be lost. Dual protocol scenario is supported for CIFS and NFSv3, for more information, please refer to [Create a dual-protocol volume for Azure NetApp Files](https://docs.microsoft.com/azure/azure-netapp-files/create-volumes-dual-protocol) document.
     */
    @JvmName("xmgivkhdmmmfqunr")
    public suspend fun protocols(`value`: Output>) {
        this.protocols = value
    }

    @JvmName("urmjbuxdkvacsgvg")
    public suspend fun protocols(vararg values: Output) {
        this.protocols = Output.all(values.asList())
    }

    /**
     * @param values The target volume protocol expressed as a list. Supported single value include `CIFS`, `NFSv3`, or `NFSv4.1`. If argument is not defined it will default to `NFSv3`. Changing this forces a new resource to be created and data will be lost. Dual protocol scenario is supported for CIFS and NFSv3, for more information, please refer to [Create a dual-protocol volume for Azure NetApp Files](https://docs.microsoft.com/azure/azure-netapp-files/create-volumes-dual-protocol) document.
     */
    @JvmName("lurfxbmdslaywuqm")
    public suspend fun protocols(values: List>) {
        this.protocols = Output.all(values)
    }

    /**
     * @param value The name of the resource group where the NetApp Volume should be created. Changing this forces a new resource to be created.
     */
    @JvmName("vojtlyrceryflpxx")
    public suspend fun resourceGroupName(`value`: Output) {
        this.resourceGroupName = value
    }

    /**
     * @param value Volume security style, accepted values are `unix` or `ntfs`. If not provided, single-protocol volume is created defaulting to `unix` if it is `NFSv3` or `NFSv4.1` volume, if `CIFS`, it will default to `ntfs`. In a dual-protocol volume, if not provided, its value will be `ntfs`. Changing this forces a new resource to be created.
     */
    @JvmName("oxenbovuhbfhvkkl")
    public suspend fun securityStyle(`value`: Output) {
        this.securityStyle = value
    }

    /**
     * @param value The target performance of the file system. Valid values include `Premium`, `Standard`, or `Ultra`. Changing this forces a new resource to be created.
     */
    @JvmName("shjqirpvypvcarqs")
    public suspend fun serviceLevel(`value`: Output) {
        this.serviceLevel = value
    }

    /**
     * @param value Limits enumeration of files and folders (that is, listing the contents) in SMB only to users with allowed access on the share. For instance, if a user doesn't have access to read a file or folder in a share with access-based enumeration enabled, then the file or folder doesn't show up in directory listings. Defaults to `false`. For more information, please refer to [Understand NAS share permissions in Azure NetApp Files](https://learn.microsoft.com/en-us/azure/azure-netapp-files/network-attached-storage-permissions#:~:text=security%20for%20administrators.-,Access%2Dbased%20enumeration,in%20an%20Azure%20NetApp%20Files%20SMB%20volume.%20Only%20contosoadmin%20has%20access.,-In%20the%20below)
     */
    @JvmName("uceawvhmoderbdtc")
    public suspend fun smbAccessBasedEnumerationEnabled(`value`: Output) {
        this.smbAccessBasedEnumerationEnabled = value
    }

    /**
     * @param value Enable SMB Continuous Availability.
     */
    @JvmName("axaesrcxqykbsekj")
    public suspend fun smbContinuousAvailabilityEnabled(`value`: Output) {
        this.smbContinuousAvailabilityEnabled = value
    }

    /**
     * @param value Limits clients from browsing for an SMB share by hiding the share from view in Windows Explorer or when listing shares in "net view." Only end users that know the absolute paths to the share are able to find the share. Defaults to `false`. For more information, please refer to [Understand NAS share permissions in Azure NetApp Files](https://learn.microsoft.com/en-us/azure/azure-netapp-files/network-attached-storage-permissions#:~:text=Non%2Dbrowsable%20shares,find%20the%20share.)
     */
    @JvmName("lrorhgbicfkyivbx")
    public suspend fun smbNonBrowsableEnabled(`value`: Output) {
        this.smbNonBrowsableEnabled = value
    }

    /**
     * @param value Specifies whether the .snapshot (NFS clients) or ~snapshot (SMB clients) path of a volume is visible, default value is true.
     */
    @JvmName("acjmpnmocteykibg")
    public suspend fun snapshotDirectoryVisible(`value`: Output) {
        this.snapshotDirectoryVisible = value
    }

    /**
     * @param value The maximum Storage Quota allowed for a file system in Gigabytes.
     */
    @JvmName("lxjciofspefcofuy")
    public suspend fun storageQuotaInGb(`value`: Output) {
        this.storageQuotaInGb = value
    }

    /**
     * @param value The ID of the Subnet the NetApp Volume resides in, which must have the `Microsoft.NetApp/volumes` delegation. Changing this forces a new resource to be created.
     */
    @JvmName("giujiurlctemiaxo")
    public suspend fun subnetId(`value`: Output) {
        this.subnetId = value
    }

    /**
     * @param value A mapping of tags to assign to the resource.
     * > **Note:** It is highly recommended to use the **lifecycle** property as noted in the example since it will prevent an accidental deletion of the volume if the `protocols` argument changes to a different protocol type.
     */
    @JvmName("pekrvxtrfjldwscu")
    public suspend fun tags(`value`: Output>) {
        this.tags = value
    }

    /**
     * @param value Throughput of this volume in Mibps.
     */
    @JvmName("efkqjpmhvvfhctbn")
    public suspend fun throughputInMibps(`value`: Output) {
        this.throughputInMibps = value
    }

    /**
     * @param value A unique file path for the volume. Used when creating mount targets. Changing this forces a new resource to be created.
     */
    @JvmName("dwtwqwdrjgoudvmp")
    public suspend fun volumePath(`value`: Output) {
        this.volumePath = value
    }

    /**
     * @param value Specifies the Availability Zone in which the Volume should be located. Possible values are `1`, `2` and `3`. Changing this forces a new resource to be created. This feature is currently in preview, for more information on how to enable it, please refer to [Manage availability zone volume placement for Azure NetApp Files](https://learn.microsoft.com/en-us/azure/azure-netapp-files/manage-availability-zone-volume-placement#register-the-feature).
     */
    @JvmName("xenwigbopxjgxfsy")
    public suspend fun zone(`value`: Output) {
        this.zone = value
    }

    /**
     * @param value The name of the NetApp account in which the NetApp Pool should be created. Changing this forces a new resource to be created.
     */
    @JvmName("nmolhpjaopgimddx")
    public suspend fun accountName(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.accountName = mapped
    }

    /**
     * @param value Is the NetApp Volume enabled for Azure VMware Solution (AVS) datastore purpose. Defaults to `false`. Changing this forces a new resource to be created.
     */
    @JvmName("dsaibiqklrtbmgtg")
    public suspend fun azureVmwareDataStoreEnabled(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.azureVmwareDataStoreEnabled = mapped
    }

    /**
     * @param value Creates volume from snapshot. Following properties must be the same as the original volume where the snapshot was taken from: `protocols`, `subnet_id`, `location`, `service_level`, `resource_group_name`, `account_name` and `pool_name`. Changing this forces a new resource to be created.
     */
    @JvmName("akcwstnnvwirntak")
    public suspend fun createFromSnapshotResourceId(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.createFromSnapshotResourceId = mapped
    }

    /**
     * @param value A `data_protection_replication` block as defined below. Changing this forces a new resource to be created.
     */
    @JvmName("qarlpsmjugsngnhp")
    public suspend fun dataProtectionReplication(`value`: VolumeDataProtectionReplicationArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.dataProtectionReplication = mapped
    }

    /**
     * @param argument A `data_protection_replication` block as defined below. Changing this forces a new resource to be created.
     */
    @JvmName("thfpnxgkeloqldfn")
    public suspend
    fun dataProtectionReplication(argument: suspend VolumeDataProtectionReplicationArgsBuilder.() -> Unit) {
        val toBeMapped = VolumeDataProtectionReplicationArgsBuilder().applySuspend { argument() }.build()
        val mapped = of(toBeMapped)
        this.dataProtectionReplication = mapped
    }

    /**
     * @param value A `data_protection_snapshot_policy` block as defined below.
     */
    @JvmName("kdingrdlpmlmnwpp")
    public suspend
    fun dataProtectionSnapshotPolicy(`value`: VolumeDataProtectionSnapshotPolicyArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.dataProtectionSnapshotPolicy = mapped
    }

    /**
     * @param argument A `data_protection_snapshot_policy` block as defined below.
     */
    @JvmName("vvxpktvajirpkvkv")
    public suspend
    fun dataProtectionSnapshotPolicy(argument: suspend VolumeDataProtectionSnapshotPolicyArgsBuilder.() -> Unit) {
        val toBeMapped = VolumeDataProtectionSnapshotPolicyArgsBuilder().applySuspend {
            argument()
        }.build()
        val mapped = of(toBeMapped)
        this.dataProtectionSnapshotPolicy = mapped
    }

    /**
     * @param value The encryption key source, it can be `Microsoft.NetApp` for platform managed keys or `Microsoft.KeyVault` for customer-managed keys. This is required with `key_vault_private_endpoint_id`. Changing this forces a new resource to be created.
     */
    @JvmName("eekurrnpnvlpbmbh")
    public suspend fun encryptionKeySource(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.encryptionKeySource = mapped
    }

    /**
     * @param value One or more `export_policy_rule` block defined below.
     */
    @JvmName("uudgylpkmgoyarxf")
    public suspend fun exportPolicyRules(`value`: List?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.exportPolicyRules = mapped
    }

    /**
     * @param argument One or more `export_policy_rule` block defined below.
     */
    @JvmName("lspknfrsnourmvbi")
    public suspend
    fun exportPolicyRules(argument: List Unit>) {
        val toBeMapped = argument.toList().map {
            VolumeExportPolicyRuleArgsBuilder().applySuspend {
                it()
            }.build()
        }
        val mapped = of(toBeMapped)
        this.exportPolicyRules = mapped
    }

    /**
     * @param argument One or more `export_policy_rule` block defined below.
     */
    @JvmName("seogfrqhqmljeplv")
    public suspend fun exportPolicyRules(
        vararg
        argument: suspend VolumeExportPolicyRuleArgsBuilder.() -> Unit,
    ) {
        val toBeMapped = argument.toList().map {
            VolumeExportPolicyRuleArgsBuilder().applySuspend {
                it()
            }.build()
        }
        val mapped = of(toBeMapped)
        this.exportPolicyRules = mapped
    }

    /**
     * @param argument One or more `export_policy_rule` block defined below.
     */
    @JvmName("nablobyogkjxibkm")
    public suspend
    fun exportPolicyRules(argument: suspend VolumeExportPolicyRuleArgsBuilder.() -> Unit) {
        val toBeMapped = listOf(VolumeExportPolicyRuleArgsBuilder().applySuspend { argument() }.build())
        val mapped = of(toBeMapped)
        this.exportPolicyRules = mapped
    }

    /**
     * @param values One or more `export_policy_rule` block defined below.
     */
    @JvmName("maqgbdfbxpvulfwl")
    public suspend fun exportPolicyRules(vararg values: VolumeExportPolicyRuleArgs) {
        val toBeMapped = values.toList()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.exportPolicyRules = mapped
    }

    /**
     * @param value Enable to allow Kerberos secured volumes. Requires appropriate export rules as well as the parent `azure.netapp.Account`
     * having a defined AD connection.
     */
    @JvmName("lkgannccyeiopsow")
    public suspend fun kerberosEnabled(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.kerberosEnabled = mapped
    }

    /**
     * @param value The Private Endpoint ID for Key Vault, which is required when using customer-managed keys. This is required with `encryption_key_source`. Changing this forces a new resource to be created.
     */
    @JvmName("mhyvyynhhdwkaeqt")
    public suspend fun keyVaultPrivateEndpointId(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.keyVaultPrivateEndpointId = mapped
    }

    /**
     * @param value Specifies the supported Azure location where the resource exists. Changing this forces a new resource to be created.
     */
    @JvmName("ngoxvhytkxxycrrl")
    public suspend fun location(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.location = mapped
    }

    /**
     * @param value The name of the NetApp Volume. Changing this forces a new resource to be created.
     */
    @JvmName("vevskldrkcdpnvyc")
    public suspend fun name(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.name = mapped
    }

    /**
     * @param value Indicates which network feature to use, accepted values are `Basic` or `Standard`, it defaults to `Basic` if not defined. This is a feature in public preview and for more information about it and how to register, please refer to [Configure network features for an Azure NetApp Files volume](https://docs.microsoft.com/en-us/azure/azure-netapp-files/configure-network-features).
     */
    @JvmName("hsicoreqkrsabkkr")
    public suspend fun networkFeatures(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.networkFeatures = mapped
    }

    /**
     * @param value The name of the NetApp pool in which the NetApp Volume should be created. Changing this forces a new resource to be created.
     */
    @JvmName("ykprolpjqvktwgii")
    public suspend fun poolName(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.poolName = mapped
    }

    /**
     * @param value The target volume protocol expressed as a list. Supported single value include `CIFS`, `NFSv3`, or `NFSv4.1`. If argument is not defined it will default to `NFSv3`. Changing this forces a new resource to be created and data will be lost. Dual protocol scenario is supported for CIFS and NFSv3, for more information, please refer to [Create a dual-protocol volume for Azure NetApp Files](https://docs.microsoft.com/azure/azure-netapp-files/create-volumes-dual-protocol) document.
     */
    @JvmName("sqgghotmubjxtrur")
    public suspend fun protocols(`value`: List?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.protocols = mapped
    }

    /**
     * @param values The target volume protocol expressed as a list. Supported single value include `CIFS`, `NFSv3`, or `NFSv4.1`. If argument is not defined it will default to `NFSv3`. Changing this forces a new resource to be created and data will be lost. Dual protocol scenario is supported for CIFS and NFSv3, for more information, please refer to [Create a dual-protocol volume for Azure NetApp Files](https://docs.microsoft.com/azure/azure-netapp-files/create-volumes-dual-protocol) document.
     */
    @JvmName("mfmoiqhagpxemxvt")
    public suspend fun protocols(vararg values: String) {
        val toBeMapped = values.toList()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.protocols = mapped
    }

    /**
     * @param value The name of the resource group where the NetApp Volume should be created. Changing this forces a new resource to be created.
     */
    @JvmName("oiwucuktjkchhqsd")
    public suspend fun resourceGroupName(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.resourceGroupName = mapped
    }

    /**
     * @param value Volume security style, accepted values are `unix` or `ntfs`. If not provided, single-protocol volume is created defaulting to `unix` if it is `NFSv3` or `NFSv4.1` volume, if `CIFS`, it will default to `ntfs`. In a dual-protocol volume, if not provided, its value will be `ntfs`. Changing this forces a new resource to be created.
     */
    @JvmName("tyucxeqwudrpawvt")
    public suspend fun securityStyle(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.securityStyle = mapped
    }

    /**
     * @param value The target performance of the file system. Valid values include `Premium`, `Standard`, or `Ultra`. Changing this forces a new resource to be created.
     */
    @JvmName("lldeibdwhcifdvjk")
    public suspend fun serviceLevel(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.serviceLevel = mapped
    }

    /**
     * @param value Limits enumeration of files and folders (that is, listing the contents) in SMB only to users with allowed access on the share. For instance, if a user doesn't have access to read a file or folder in a share with access-based enumeration enabled, then the file or folder doesn't show up in directory listings. Defaults to `false`. For more information, please refer to [Understand NAS share permissions in Azure NetApp Files](https://learn.microsoft.com/en-us/azure/azure-netapp-files/network-attached-storage-permissions#:~:text=security%20for%20administrators.-,Access%2Dbased%20enumeration,in%20an%20Azure%20NetApp%20Files%20SMB%20volume.%20Only%20contosoadmin%20has%20access.,-In%20the%20below)
     */
    @JvmName("qlgsehgjuytckghm")
    public suspend fun smbAccessBasedEnumerationEnabled(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.smbAccessBasedEnumerationEnabled = mapped
    }

    /**
     * @param value Enable SMB Continuous Availability.
     */
    @JvmName("eoxghlmqgdyjnysh")
    public suspend fun smbContinuousAvailabilityEnabled(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.smbContinuousAvailabilityEnabled = mapped
    }

    /**
     * @param value Limits clients from browsing for an SMB share by hiding the share from view in Windows Explorer or when listing shares in "net view." Only end users that know the absolute paths to the share are able to find the share. Defaults to `false`. For more information, please refer to [Understand NAS share permissions in Azure NetApp Files](https://learn.microsoft.com/en-us/azure/azure-netapp-files/network-attached-storage-permissions#:~:text=Non%2Dbrowsable%20shares,find%20the%20share.)
     */
    @JvmName("ewsmobbvsklirwnr")
    public suspend fun smbNonBrowsableEnabled(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.smbNonBrowsableEnabled = mapped
    }

    /**
     * @param value Specifies whether the .snapshot (NFS clients) or ~snapshot (SMB clients) path of a volume is visible, default value is true.
     */
    @JvmName("vombmrosxbpcmbeo")
    public suspend fun snapshotDirectoryVisible(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.snapshotDirectoryVisible = mapped
    }

    /**
     * @param value The maximum Storage Quota allowed for a file system in Gigabytes.
     */
    @JvmName("kefqxlbshipqpwmv")
    public suspend fun storageQuotaInGb(`value`: Int?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.storageQuotaInGb = mapped
    }

    /**
     * @param value The ID of the Subnet the NetApp Volume resides in, which must have the `Microsoft.NetApp/volumes` delegation. Changing this forces a new resource to be created.
     */
    @JvmName("sjfnpngeielkrpox")
    public suspend fun subnetId(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.subnetId = mapped
    }

    /**
     * @param value A mapping of tags to assign to the resource.
     * > **Note:** It is highly recommended to use the **lifecycle** property as noted in the example since it will prevent an accidental deletion of the volume if the `protocols` argument changes to a different protocol type.
     */
    @JvmName("ypsvhsmnbikgwxxl")
    public suspend fun tags(`value`: Map?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.tags = mapped
    }

    /**
     * @param values A mapping of tags to assign to the resource.
     * > **Note:** It is highly recommended to use the **lifecycle** property as noted in the example since it will prevent an accidental deletion of the volume if the `protocols` argument changes to a different protocol type.
     */
    @JvmName("kjemanfdbwnvkqrm")
    public fun tags(vararg values: Pair) {
        val toBeMapped = values.toMap()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.tags = mapped
    }

    /**
     * @param value Throughput of this volume in Mibps.
     */
    @JvmName("xekioymgypdikdqq")
    public suspend fun throughputInMibps(`value`: Double?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.throughputInMibps = mapped
    }

    /**
     * @param value A unique file path for the volume. Used when creating mount targets. Changing this forces a new resource to be created.
     */
    @JvmName("ycbtcndgwmgnbvfn")
    public suspend fun volumePath(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.volumePath = mapped
    }

    /**
     * @param value Specifies the Availability Zone in which the Volume should be located. Possible values are `1`, `2` and `3`. Changing this forces a new resource to be created. This feature is currently in preview, for more information on how to enable it, please refer to [Manage availability zone volume placement for Azure NetApp Files](https://learn.microsoft.com/en-us/azure/azure-netapp-files/manage-availability-zone-volume-placement#register-the-feature).
     */
    @JvmName("kqlqijgncturfsnl")
    public suspend fun zone(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.zone = mapped
    }

    internal fun build(): VolumeArgs = VolumeArgs(
        accountName = accountName,
        azureVmwareDataStoreEnabled = azureVmwareDataStoreEnabled,
        createFromSnapshotResourceId = createFromSnapshotResourceId,
        dataProtectionReplication = dataProtectionReplication,
        dataProtectionSnapshotPolicy = dataProtectionSnapshotPolicy,
        encryptionKeySource = encryptionKeySource,
        exportPolicyRules = exportPolicyRules,
        kerberosEnabled = kerberosEnabled,
        keyVaultPrivateEndpointId = keyVaultPrivateEndpointId,
        location = location,
        name = name,
        networkFeatures = networkFeatures,
        poolName = poolName,
        protocols = protocols,
        resourceGroupName = resourceGroupName,
        securityStyle = securityStyle,
        serviceLevel = serviceLevel,
        smbAccessBasedEnumerationEnabled = smbAccessBasedEnumerationEnabled,
        smbContinuousAvailabilityEnabled = smbContinuousAvailabilityEnabled,
        smbNonBrowsableEnabled = smbNonBrowsableEnabled,
        snapshotDirectoryVisible = snapshotDirectoryVisible,
        storageQuotaInGb = storageQuotaInGb,
        subnetId = subnetId,
        tags = tags,
        throughputInMibps = throughputInMibps,
        volumePath = volumePath,
        zone = zone,
    )
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy