pspulumiyaml.azurenative.storagecache.psm1

using module @{ ModuleName = "PSPulumiYaml"; ModuleVersion = "0.0.3"; GUID = "909344e0-a08f-45f6-8177-80e36bb2ba58" }
function Invoke-AzureNativeFunctionStoragecacheGetCache
{
    param (
        [parameter(mandatory=$False,HelpMessage='Name of Cache. Length of name must not be greater than 80 and chars must be from the [-0-9a-zA-Z_] char class.)')]
        [string]
        $cacheName,
        [parameter(mandatory=$False,HelpMessage='Target resource group.)')]
        [string]
        $resourceGroupName
    )

    process
    {
        $arguments = @{}
        $arguments["cacheName"] = $cacheName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:storagecache:getCache -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionStoragecacheGetStorageTarget
{
    param (
        [parameter(mandatory=$False,HelpMessage='Name of Storage Target.)')]
        [string]
        $storageTargetName,
        [parameter(mandatory=$False,HelpMessage='Target resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Name of Cache. Length of name must not be greater than 80 and chars must be from the [-0-9a-zA-Z_] char class.)')]
        [string]
        $cacheName
    )

    process
    {
        $arguments = @{}
        $arguments["cacheName"] = $cacheName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["storageTargetName"] = $storageTargetName

        $functionObject = Invoke-PulumiFunction -Name azure-native:storagecache:getStorageTarget -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
class ClfsTarget
{
    [string] $target
}
function New-AzureNativeTypeStoragecacheClfsTarget
{
    param (
        [parameter(mandatory=$False,HelpMessage='Resource ID of storage container.)')]
        [string]
        $target
    )

    process
    {
        return $([ClfsTarget]$PSBoundParameters)
    }
}
class Nfs3Target
{
    [string] $usageModel
    [string] $target
}
function New-AzureNativeTypeStoragecacheNfs3Target
{
    param (
        [parameter(mandatory=$False,HelpMessage='Identifies the StorageCache usage model to be used for this storage target.)')]
        [string]
        $usageModel,
        [parameter(mandatory=$False,HelpMessage='IP address or host name of an NFSv3 host (e.g., 10.0.44.44).)')]
        [string]
        $target
    )

    process
    {
        return $([Nfs3Target]$PSBoundParameters)
    }
}
class BlobNfsTarget
{
    [string] $usageModel
    [string] $target
}
function New-AzureNativeTypeStoragecacheBlobNfsTarget
{
    param (
        [parameter(mandatory=$False,HelpMessage='Identifies the StorageCache usage model to be used for this storage target.)')]
        [string]
        $usageModel,
        [parameter(mandatory=$False,HelpMessage='Resource ID of the storage container.)')]
        [string]
        $target
    )

    process
    {
        return $([BlobNfsTarget]$PSBoundParameters)
    }
}
class UnknownTarget
{
    [object] $attributes
}
function New-AzureNativeTypeStoragecacheUnknownTarget
{
    param (
        [parameter(mandatory=$False,HelpMessage='Dictionary of string->string pairs containing information about the Storage Target.)')]
        [hashtable]
        $attributes
    )

    process
    {
        return $([UnknownTarget]$PSBoundParameters)
    }
}
function New-AzureNativeStoragecacheStorageTarget
{
    [Alias('azure_native_storagecache_storagetarget')]
    param (
        [parameter(mandatory=$False,HelpMessage='List of Cache namespace junctions to target for namespace associations.)')]
        $junctions,
        [parameter(mandatory=$False,HelpMessage='Name of Storage Target.)')]
        [string]
        $storageTargetName,
        [parameter(mandatory=$False,HelpMessage='Properties when targetType is clfs.)')]
        [ClfsTarget]
        $clfs,
        [parameter(mandatory=$False,HelpMessage='Properties when targetType is nfs3.)')]
        [Nfs3Target]
        $nfs3,
        [parameter(mandatory=$False,HelpMessage='Properties when targetType is blobNfs.)')]
        [BlobNfsTarget]
        $blobNfs,
        [parameter(mandatory=$False,HelpMessage='Target resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Type of the Storage Target.)')]
        [string]
        [ArgumentCompletions('nfs3', 'clfs', 'unknown', 'blobNfs')]
        $targetType,
        [parameter(mandatory=$False,HelpMessage='Properties when targetType is unknown.)')]
        [UnknownTarget]
        $unknown,
        [parameter(mandatory=$False,HelpMessage='Name of Cache. Length of name must not be greater than 80 and chars must be from the [-0-9a-zA-Z_] char class.)')]
        [string]
        $cacheName,
        [parameter(mandatory=$False,HelpMessage='ARM provisioning state, see https://github.com/Azure/azure-resource-manager-rpc/blob/master/v1.0/Addendum.md#provisioningstate-property)')]
        [string]
        [ArgumentCompletions('Succeeded', 'Failed', 'Cancelled', 'Creating', 'Deleting', 'Updating')]
        $provisioningState,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:storagecache:StorageTarget")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["cacheName"] = $cacheName
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["targetType"] = $targetType

        if($PSBoundParameters.Keys -icontains 'junctions')
        {
            $resource.properties["junctions"] = $junctions
        }

        if($PSBoundParameters.Keys -icontains 'storageTargetName')
        {
            $resource.properties["storageTargetName"] = $storageTargetName
        }

        if($PSBoundParameters.Keys -icontains 'clfs')
        {
            $resource.properties["clfs"] = $clfs
        }

        if($PSBoundParameters.Keys -icontains 'nfs3')
        {
            $resource.properties["nfs3"] = $nfs3
        }

        if($PSBoundParameters.Keys -icontains 'blobNfs')
        {
            $resource.properties["blobNfs"] = $blobNfs
        }

        if($PSBoundParameters.Keys -icontains 'unknown')
        {
            $resource.properties["unknown"] = $unknown
        }

        if($PSBoundParameters.Keys -icontains 'provisioningState')
        {
            $resource.properties["provisioningState"] = $provisioningState
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class CacheSku
{
    [string] $name
}
function New-AzureNativeTypeStoragecacheCacheSku
{
    param (
        [parameter(mandatory=$False,HelpMessage='SKU name for this Cache.)')]
        [string]
        $name
    )

    process
    {
        return $([CacheSku]$PSBoundParameters)
    }
}
class CacheNetworkSettings
{
    [string] $dnsSearchDomain
    [string] $ntpServer
    [string[]] $dnsServers
    [int] $mtu
}
function New-AzureNativeTypeStoragecacheCacheNetworkSettings
{
    param (
        [parameter(mandatory=$False,HelpMessage='DNS search domain)')]
        [string]
        $dnsSearchDomain,
        [parameter(mandatory=$False,HelpMessage='NTP server IP Address or FQDN for the cache to use. The default is time.windows.com.)')]
        [string]
        $ntpServer,
        [parameter(mandatory=$False,HelpMessage='DNS servers for the cache to use. It will be set from the network configuration if no value is provided.)')]
        [string[]]
        $dnsServers,
        [parameter(mandatory=$False,HelpMessage='The IPv4 maximum transmission unit configured for the subnet.)')]
        [int]
        $mtu
    )

    process
    {
        return $([CacheNetworkSettings]$PSBoundParameters)
    }
}
class NfsAccessRule
{
    [string] $anonymousGID
    [bool] $rootSquash
    [bool] $suid
    [string] $filter
    [bool] $submountAccess
    [ArgumentCompletions('default', 'network', 'host')]
    [string] $scope
    [string] $anonymousUID
    [ArgumentCompletions('no', 'ro', 'rw')]
    [string] $access
}
function New-AzureNativeTypeStoragecacheNfsAccessRule
{
    param (
        [parameter(mandatory=$False,HelpMessage='GID value that replaces 0 when rootSquash is true. This will use the value of anonymousUID if not provided.)')]
        [string]
        $anonymousGID,
        [parameter(mandatory=$False,HelpMessage='Map root accesses to anonymousUID and anonymousGID.)')]
        [bool]
        $rootSquash,
        [parameter(mandatory=$False,HelpMessage='Allow SUID semantics.)')]
        [bool]
        $suid,
        [parameter(mandatory=$False,HelpMessage='Filter applied to the scope for this rule. The filter''s format depends on its scope. ''default'' scope matches all clients and has no filter value. ''network'' scope takes a filter in CIDR format (for example, 10.99.1.0/24). ''host'' takes an IP address or fully qualified domain name as filter. If a client does not match any filter rule and there is no default rule, access is denied.)')]
        [string]
        $filter,
        [parameter(mandatory=$False,HelpMessage='For the default policy, allow access to subdirectories under the root export. If this is set to no, clients can only mount the path ''/''. If set to yes, clients can mount a deeper path, like ''/a/b''.)')]
        [bool]
        $submountAccess,
        [parameter(mandatory=$False,HelpMessage='Scope for this rule. The scope and filter determine which clients match the rule.)')]
        [string]
        [ArgumentCompletions('default', 'network', 'host')]
        $scope,
        [parameter(mandatory=$False,HelpMessage='UID value that replaces 0 when rootSquash is true. 65534 will be used if not provided.)')]
        [string]
        $anonymousUID,
        [parameter(mandatory=$False,HelpMessage='Access allowed by this rule.)')]
        [string]
        [ArgumentCompletions('no', 'ro', 'rw')]
        $access
    )

    process
    {
        return $([NfsAccessRule]$PSBoundParameters)
    }
}
class NfsAccessPolicy
{
    [string] $name
    [NfsAccessRule[]] $accessRules
}
function New-AzureNativeTypeStoragecacheNfsAccessPolicy
{
    param (
        [parameter(mandatory=$False,HelpMessage='Name identifying this policy. Access Policy names are not case sensitive.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The set of rules describing client accesses allowed under this policy.)')]
        $accessRules
    )

    process
    {
        return $([NfsAccessPolicy]$PSBoundParameters)
    }
}
class CacheSecuritySettings
{
    [NfsAccessPolicy[]] $accessPolicies
}
function New-AzureNativeTypeStoragecacheCacheSecuritySettings
{
    param (
        [parameter(mandatory=$False,HelpMessage='NFS access policies defined for this cache.)')]
        $accessPolicies
    )

    process
    {
        return $([CacheSecuritySettings]$PSBoundParameters)
    }
}
class CacheIdentity
{
    [ArgumentCompletions('SystemAssigned', 'None')]
    [object] $type
}
function New-AzureNativeTypeStoragecacheCacheIdentity
{
    param (
        [parameter(mandatory=$False,HelpMessage='The type of identity used for the cache)')]
        $type
    )

    process
    {
        return $([CacheIdentity]$PSBoundParameters)
    }
}
class CacheActiveDirectorySettingsCredentials
{
    [string] $username
    [string] $password
}
function New-AzureNativeTypeStoragecacheCacheActiveDirectorySettingsCredentials
{
    param (
        [parameter(mandatory=$False,HelpMessage='Username of the Active Directory domain administrator. This value is stored encrypted and not returned on response.)')]
        [string]
        $username,
        [parameter(mandatory=$False,HelpMessage='Plain text password of the Active Directory domain administrator. This value is stored encrypted and not returned on response.)')]
        [string]
        $password
    )

    process
    {
        return $([CacheActiveDirectorySettingsCredentials]$PSBoundParameters)
    }
}
class CacheActiveDirectorySettings
{
    [string] $secondaryDnsIpAddress
    [string] $cacheNetBiosName
    [CacheActiveDirectorySettingsCredentials] $credentials
    [string] $primaryDnsIpAddress
    [string] $domainName
    [string] $domainNetBiosName
}
function New-AzureNativeTypeStoragecacheCacheActiveDirectorySettings
{
    param (
        [parameter(mandatory=$False,HelpMessage='Secondary DNS IP address used to resolve the Active Directory domain controller''s fully qualified domain name.)')]
        [string]
        $secondaryDnsIpAddress,
        [parameter(mandatory=$False,HelpMessage='The NetBIOS name to assign to the HPC Cache when it joins the Active Directory domain as a server. Length must 1-15 characters from the class [-0-9a-zA-Z].)')]
        [string]
        $cacheNetBiosName,
        [parameter(mandatory=$False,HelpMessage='Active Directory admin credentials used to join the HPC Cache to a domain.)')]
        [CacheActiveDirectorySettingsCredentials]
        $credentials,
        [parameter(mandatory=$False,HelpMessage='Primary DNS IP address used to resolve the Active Directory domain controller''s fully qualified domain name.)')]
        [string]
        $primaryDnsIpAddress,
        [parameter(mandatory=$False,HelpMessage='The fully qualified domain name of the Active Directory domain controller.)')]
        [string]
        $domainName,
        [parameter(mandatory=$False,HelpMessage='The Active Directory domain''s NetBIOS name.)')]
        [string]
        $domainNetBiosName
    )

    process
    {
        return $([CacheActiveDirectorySettings]$PSBoundParameters)
    }
}
class CacheUsernameDownloadSettingsCredentials
{
    [string] $bindDn
    [string] $bindPassword
}
function New-AzureNativeTypeStoragecacheCacheUsernameDownloadSettingsCredentials
{
    param (
        [parameter(mandatory=$False,HelpMessage='The Bind Distinguished Name identity to be used in the secure LDAP connection. This value is stored encrypted and not returned on response.)')]
        [string]
        $bindDn,
        [parameter(mandatory=$False,HelpMessage='The Bind password to be used in the secure LDAP connection. This value is stored encrypted and not returned on response.)')]
        [string]
        $bindPassword
    )

    process
    {
        return $([CacheUsernameDownloadSettingsCredentials]$PSBoundParameters)
    }
}
class CacheUsernameDownloadSettings
{
    [string] $ldapBaseDN
    [string] $caCertificateURI
    [bool] $autoDownloadCertificate
    [string] $ldapServer
    [string] $userFileURI
    [CacheUsernameDownloadSettingsCredentials] $credentials
    [bool] $requireValidCertificate
    [bool] $encryptLdapConnection
    [bool] $extendedGroups
    [ArgumentCompletions('AD', 'LDAP', 'File', 'None')]
    [string] $usernameSource
    [string] $groupFileURI
}
function New-AzureNativeTypeStoragecacheCacheUsernameDownloadSettings
{
    param (
        [parameter(mandatory=$False,HelpMessage='The base distinguished name for the LDAP domain.)')]
        [string]
        $ldapBaseDN,
        [parameter(mandatory=$False,HelpMessage='The URI of the CA certificate to validate the LDAP secure connection. This field must be populated when ''requireValidCertificate'' is set to true.)')]
        [string]
        $caCertificateURI,
        [parameter(mandatory=$False,HelpMessage='Determines if the certificate should be automatically downloaded. This applies to ''caCertificateURI'' only if ''requireValidCertificate'' is true.)')]
        [bool]
        $autoDownloadCertificate,
        [parameter(mandatory=$False,HelpMessage='The fully qualified domain name or IP address of the LDAP server to use.)')]
        [string]
        $ldapServer,
        [parameter(mandatory=$False,HelpMessage='The URI of the file containing user information (in /etc/passwd file format). This field must be populated when ''usernameSource'' is set to ''File''.)')]
        [string]
        $userFileURI,
        [parameter(mandatory=$False,HelpMessage='When present, these are the credentials for the secure LDAP connection.)')]
        [CacheUsernameDownloadSettingsCredentials]
        $credentials,
        [parameter(mandatory=$False,HelpMessage='Determines if the certificates must be validated by a certificate authority. When true, caCertificateURI must be provided.)')]
        [bool]
        $requireValidCertificate,
        [parameter(mandatory=$False,HelpMessage='Whether or not the LDAP connection should be encrypted.)')]
        [bool]
        $encryptLdapConnection,
        [parameter(mandatory=$False,HelpMessage='Whether or not Extended Groups is enabled.)')]
        [bool]
        $extendedGroups,
        [parameter(mandatory=$False,HelpMessage='This setting determines how the cache gets username and group names for clients.)')]
        [string]
        [ArgumentCompletions('AD', 'LDAP', 'File', 'None')]
        $usernameSource,
        [parameter(mandatory=$False,HelpMessage='The URI of the file containing group information (in /etc/group file format). This field must be populated when ''usernameSource'' is set to ''File''.)')]
        [string]
        $groupFileURI
    )

    process
    {
        return $([CacheUsernameDownloadSettings]$PSBoundParameters)
    }
}
class CacheDirectorySettings
{
    [CacheActiveDirectorySettings] $activeDirectory
    [CacheUsernameDownloadSettings] $usernameDownload
}
function New-AzureNativeTypeStoragecacheCacheDirectorySettings
{
    param (
        [parameter(mandatory=$False,HelpMessage='Specifies settings for joining the HPC Cache to an Active Directory domain.)')]
        [CacheActiveDirectorySettings]
        $activeDirectory,
        [parameter(mandatory=$False,HelpMessage='Specifies settings for Extended Groups. Extended Groups allows users to be members of more than 16 groups.)')]
        [CacheUsernameDownloadSettings]
        $usernameDownload
    )

    process
    {
        return $([CacheDirectorySettings]$PSBoundParameters)
    }
}
class KeyVaultKeyReferenceSourceVault
{
    [string] $id
}
function New-AzureNativeTypeStoragecacheKeyVaultKeyReferenceSourceVault
{
    param (
        [parameter(mandatory=$False,HelpMessage='Resource Id.)')]
        [string]
        $id
    )

    process
    {
        return $([KeyVaultKeyReferenceSourceVault]$PSBoundParameters)
    }
}
class KeyVaultKeyReference
{
    [KeyVaultKeyReferenceSourceVault] $sourceVault
    [string] $keyUrl
}
function New-AzureNativeTypeStoragecacheKeyVaultKeyReference
{
    param (
        [parameter(mandatory=$False,HelpMessage='Describes a resource Id to source Key Vault.)')]
        [KeyVaultKeyReferenceSourceVault]
        $sourceVault,
        [parameter(mandatory=$False,HelpMessage='The URL referencing a key encryption key in Key Vault.)')]
        [string]
        $keyUrl
    )

    process
    {
        return $([KeyVaultKeyReference]$PSBoundParameters)
    }
}
class CacheEncryptionSettings
{
    [KeyVaultKeyReference] $keyEncryptionKey
}
function New-AzureNativeTypeStoragecacheCacheEncryptionSettings
{
    param (
        [parameter(mandatory=$False,HelpMessage='Specifies the location of the key encryption key in Key Vault.)')]
        [KeyVaultKeyReference]
        $keyEncryptionKey
    )

    process
    {
        return $([CacheEncryptionSettings]$PSBoundParameters)
    }
}
function New-AzureNativeStoragecacheCache
{
    [Alias('azure_native_storagecache_cache')]
    param (
        [parameter(mandatory=$False,HelpMessage='Subnet used for the Cache.)')]
        [string]
        $subnet,
        [parameter(mandatory=$False,HelpMessage='ARM provisioning state, see https://github.com/Azure/azure-resource-manager-rpc/blob/master/v1.0/Addendum.md#provisioningstate-property)')]
        [string]
        [ArgumentCompletions('Succeeded', 'Failed', 'Cancelled', 'Creating', 'Deleting', 'Updating')]
        $provisioningState,
        [parameter(mandatory=$False,HelpMessage='SKU for the Cache.)')]
        [CacheSku]
        $sku,
        [parameter(mandatory=$False,HelpMessage='Specifies network settings of the cache.)')]
        [CacheNetworkSettings]
        $networkSettings,
        [parameter(mandatory=$False,HelpMessage='Name of Cache. Length of name must not be greater than 80 and chars must be from the [-0-9a-zA-Z_] char class.)')]
        [string]
        $cacheName,
        [parameter(mandatory=$False,HelpMessage='Region name string.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='Specifies security settings of the cache.)')]
        [CacheSecuritySettings]
        $securitySettings,
        [parameter(mandatory=$False,HelpMessage='Target resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The identity of the cache, if configured.)')]
        [CacheIdentity]
        $identity,
        [parameter(mandatory=$False,HelpMessage='The size of this Cache, in GB.)')]
        [int]
        $cacheSizeGB,
        [parameter(mandatory=$False,HelpMessage='Specifies Directory Services settings of the cache.)')]
        [CacheDirectorySettings]
        $directoryServicesSettings,
        [parameter(mandatory=$False,HelpMessage='Specifies encryption settings of the cache.)')]
        [CacheEncryptionSettings]
        $encryptionSettings,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:storagecache:Cache")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'subnet')
        {
            $resource.properties["subnet"] = $subnet
        }

        if($PSBoundParameters.Keys -icontains 'provisioningState')
        {
            $resource.properties["provisioningState"] = $provisioningState
        }

        if($PSBoundParameters.Keys -icontains 'sku')
        {
            $resource.properties["sku"] = $sku
        }

        if($PSBoundParameters.Keys -icontains 'networkSettings')
        {
            $resource.properties["networkSettings"] = $networkSettings
        }

        if($PSBoundParameters.Keys -icontains 'cacheName')
        {
            $resource.properties["cacheName"] = $cacheName
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'securitySettings')
        {
            $resource.properties["securitySettings"] = $securitySettings
        }

        if($PSBoundParameters.Keys -icontains 'identity')
        {
            $resource.properties["identity"] = $identity
        }

        if($PSBoundParameters.Keys -icontains 'cacheSizeGB')
        {
            $resource.properties["cacheSizeGB"] = $cacheSizeGB
        }

        if($PSBoundParameters.Keys -icontains 'directoryServicesSettings')
        {
            $resource.properties["directoryServicesSettings"] = $directoryServicesSettings
        }

        if($PSBoundParameters.Keys -icontains 'encryptionSettings')
        {
            $resource.properties["encryptionSettings"] = $encryptionSettings
        }

        $global:pulumiresources += $resource
        return $resource
    }
}